• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 236
  • Last Modified:

Do a stantard HTTP post request using PHP

Hi experts,
i need to build an interface to some web services based on standard HTTP post as communication Method.

I have a .net example here:

 Dim XMLDoc As New System.Xml.XmlDocument()
 Dim XMLRequest As System.Xml.XmlElement
 Dim XMLHeader As System.Xml.XmlElement
 Dim XMLBody As System.Xml.XmlElement
 Dim XMLNode As System.Xml.XmlElement
 Dim XMLChildNode As System.Xml.XmlElement
 Dim XMLGrandChild As System.Xml.XmlElement
 Dim ClientID As String
 Dim Language As String
 Dim EmailAddress As String
 Dim ClientPassword As String
 Dim InterfaceURL As String
 Dim ResponseURL As String
 ' client settings
 ClientID = "YourClienTID"
 EmailAddress = "YourClientEmail"
 ClientPassword = "YourClientPassword"
 Language = "YourLanguage"
 InterfaceURL = "http://www.mysite.com/api/RequestListenerServlet"
 ResponseURL = "http:// www.mysite.com/receiveRequest.asp"
 ' create xml
 ' create request header
 XMLRequest = XMLDoc.CreateElement("Request")
 XMLHeader = XMLDoc.CreateElement("Source")
 ' client details node
 XMLNode = XMLDoc.CreateElement("RequestorID")
 XMLNode.SetAttribute("Client", ClientID)
 XMLNode.SetAttribute("EMailAddress", EmailAddress)
 XMLNode.SetAttribute("Password", ClientPassword)
 ' client preferences node
 XMLNode = XMLDoc.CreateElement("RequestorPreferences")
 XMLNode.SetAttribute("Language", Language)
 XMLChildNode = XMLDoc.CreateElement("RequestMode")
 XMLChildNode.InnerText = "SYNCHRONOUS"
 ' create request body
 XMLBody = XMLDoc.CreateElement("RequestDetails")
 XMLNode = XMLDoc.CreateElement("MyRequest")
 XMLChildNode = XMLDoc.CreateElement("Item1")
 XMLChildNode.SetAttribute("Subitem1", "val1")
 XMLChildNode.SetAttribute("Subitem2", "val2")
 XMLChildNode = XMLDoc.CreateElement("Item2")
 XMLGrandChild = XMLDoc.CreateElement("Item3")
 XMLGrandChild.InnerText = "2005-12-01"
 XMLGrandChild = XMLDoc.CreateElement("Item4")
 XMLGrandChild.InnerText = "2"
 XMLChildNode = XMLDoc.CreateElement("item6")
 XMLGrandChild = XMLDoc.CreateElement("Item7")
 XMLGrandChild.SetAttribute("Code", "db")
 XMLGrandChild.SetAttribute("NumberOfRooms", "1")
 ' create xml document
 ' post document
 Dim encoding As New System.Text.ASCIIEncoding()
 Dim byte1 As Byte() = encoding.GetBytes(XMLDoc.OuterXml)
 Dim HttpWReq As System.Net.HttpWebRequest = _
 CType(System.Net.WebRequest.Create(InterfaceURL), System.Net.HttpWebRequest)
 HttpWReq.ContentType = "text/xml"
 HttpWReq.ContentLength = XMLDoc.OuterXml.Length
 HttpWReq.Method = "POST"
 Dim StreamData As Stream = HttpWReq.GetRequestStream()
 StreamData.Write(byte1, 0, byte1.Length)

 ' get response stream
 Dim HttpWRes As System.Net.HttpWebResponse = CType(HttpWReq.GetResponse, System.Net.HttpWebResponse)
 Dim receiveStream As Stream = HttpWRes.GetResponseStream()

How can i do the same with PHP?

  • 4
  • 3
  • 2
1 Solution
Muhammad WasifCommented:
Muhammad WasifCommented:
Hope this basic example help

$url = "http://www.mysite.com/api/RequestListenerServlet";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "a=3&b=5"); //data to post
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$result = curl_exec ($ch);
echo $result;
try out this link might help

It uses the fsockopen method to POST XML data
Cloud Class® Course: Microsoft Exchange Server

The MCTS: Microsoft Exchange Server 2010 certification validates your skills in supporting the maintenance and administration of the Exchange servers in an enterprise environment. Learn everything you need to know with this course.

balromAuthor Commented:
Thanks to all for your replies.
I think is more convenient the babuno5's approach(no curl required and no post vars to specify).

I need some time to do a test.

balromAuthor Commented:
i've done a test, getting the following response:
   Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in mymodule.php

any idea?

can you post your code??
balromAuthor Commented:

there is the code:

    // try connection to the server
    $ConnectionServer = fsockopen($CFGURLTest, 80, $errno, $errstr, 30);
    if ($ConnectionServer) {
   } else {

The variable $CFGURLTest contain the address of service that receive post request.
After the fsockopen, the control skip to the else statement.

check this link it has the same bug solved
balromAuthor Commented:
Thanks babuno,

Post a request using sockets works fine, in the previuos post i was using a wrong parm in the fsockopen funtion.

For clarity to other users:
   I have to call the service with the url "http://www.myhost.com/myservice".

   for do this i first open a socket to the host:
       $Conn = fsockopen ("www.myhost.com", 80, $errno, $errstr, 30); // do not specify "http://

   then i put the post directive, specifying the service name:
      fputs($Conn, "POST /myservice HTTP/1.0\r\n");


Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Python 3 Fundamentals

This course will teach participants about installing and configuring Python, syntax, importing, statements, types, strings, booleans, files, lists, tuples, comprehensions, functions, and classes.

  • 4
  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now