使用CURL向Web服务器发送XML POST请求

17

我想使用php和curl向web服务器发送请求。虽然网上有很多好的例子,但我仍然对一些curl命令不太理解,因为我以前从未做过这样的事情。

我的目标是:有一个已经建立好的网络服务(例如:Web地图服务),我想让我的php代码向该服务发送一个post XML请求,并作为响应获取一个XML文件。

到目前为止,我所拥有的是:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, ''); 
    /*curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));*/
    /* curl_setopt($ch, CURLOPT_HEADER, 0);*/
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    /*curl_setopt($ch, CURLOPT_REFERER, '');*/
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $ch_result = curl_exec($ch);
    curl_close($ch);
    echo $ch_result;

正如我所说,我在PHP和使用Curl方面都比较新手,我认为我缺少一些概念。 我的问题是: 1)我需要放入什么字符串(链接):

          curl_setopt($ch, CURLOPT_URL, ''); 

我需要发送请求的服务的主机名是什么?

2) 在第6行中,变量$xml包含我想要作为请求发送的xml文件。这正确吗?还是这个变量应该包含其他内容?

3) 在哪些情况下需要使用httpheader或header (第3行和第4行)?

感谢您的帮助。 Dimitris

2个回答

34

试着用这种方式:

  $url = 'https://android.googleapis.com/gcm/send';
  $ch = curl_init();
  curl_setopt( $ch, CURLOPT_URL, $url );
  curl_setopt( $ch, CURLOPT_POST, true );
  curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt( $ch, CURLOPT_POSTFIELDS, "<xml>here</xml>" );
  $result = curl_exec($ch);
  curl_close($ch);

了解更多详情,请访问:http://php.net/manual/en/function.curl-setopt.php


那么在<xml>标签内我放入所有的XML字符串吗? - user1919
1
如果你的整个xml内容在变量$xml中,那么这行代码应该是:curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); - PKeidel
这个URL和在浏览器中访问接收脚本时的URL是相同的。如果你想向服务器example.com上名为"run.php"的PHP脚本发送POST请求,并且该脚本在名为"api"的子文件夹中,那么你的$url必须是"http://example.com/api/run.php"。 - PKeidel
所以在我的情况下,编写以下代码就足够了:curl_setopt($ch,CURLOPT_URL,'sendRequest.php');其中sendRequest.php包含以上所有代码。对吗? - user1919
2
没问题。你已经问了5个问题,应该开始接受一些答案 ;) - PKeidel
显示剩余3条评论

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接