簡體   English   中英

cURL沒有發布查詢字符串

[英]cURL is not posting the query string

我對cURL的經驗不足,我花了幾天的時間來解決這個問題:我遇到了cURL的問題,當我提交POST請求時,cURL沒有將查詢字符串附加到標題中的URL上; 因此,服務器未收到“有效載荷”,並且正在訪問的服務返回了錯誤狀態代碼,表明該服務未接收到適當的數據。

我認為POST應該以完整的域名開頭,但我不確定。 如果我要發布數據,則Content-Length不應為“ 0”,而不是我得到的是什么?

傳出標頭如下所示:

POST /rest/v1/oliver/groups/ORIGINNUMBER/member? HTTP/1.1
Accept: application/xml
Content-type: text/plain
User-Agent: Custom PHP Script
Host: campaign.oventus.com
Cookie:  JSESSIONID=SECRETCOOKIE
Content-Length: 95

我的php代碼如下所示:

$fields_string = "firstName=$fname&secondName=$sname&password=$pass&deviceAddress=$phonenumber&notes=testing";

$url = "http://campaign.oventus.com/rest/v1/ACCOUNTNAME/groups/ORIGINNUMBER/member?";

  $header[] = "Accept: application/xml";
  $header[] = "Content-type: text/plain";
  $header[] = "User-Agent: Custom PHP Script";
  $header[] = "Host: campaign.oventus.com";
  $header[] = "Cookie: ".$cookie;

$cx = curl_init();
    curl_setopt($cx, CURLOPT_URL,$url);
    curl_setopt($cx, CURLOPT_POST, 5);
    curl_setopt($cx, CURLOPT_POSTFIELDS,$fields_string);
    curl_setopt($cx, CURLOPT_HTTPHEADER, $header);
    curl_setopt($cx, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($cx, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($cx, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($cx, CURLOPT_FOLLOWLOCATION, FALSE);
    curl_setopt($cx, CURLOPT_TIMEOUT, 15);
    curl_setopt($cx, CURLOPT_HEADER, 1);
    curl_setopt($cx, CURLINFO_HEADER_OUT, TRUE);
$final = curl_exec($cx);
$errors = curl_error($cx);
$errornos = curl_errno($cx);

$headcut2 = explode ("n/xml", $final);
$headstring2 = $headcut2[0]."n/xml";
$xmlstring2 = $headcut2[1];

    echo "<h2>Add to Group result: </h2>";
    echo "<p>RAW header: <code>$final</code></p>";
    //echo "<p>Response header: <code>".htmlentities($headstring2)."</code></p>";
    echo "<p>XML response: <code>".htmlentities($xmlstring2)."</code></p>";
    //echo "<p>".print_r($info)."</p>";
    //echo "<p>CURL info: $info</p>";
    //echo "<p>Curl error: $errors</p>";
    echo "<p>Curl error num: $errornos</p>";

    print "<pre>\n";
    print_r(curl_getinfo($cx));  // get error info
    print "</pre>\n";

    curl_close($cx);

服務器返回的標頭是這樣的:

HTTP/1.1 200 OK Date: Fri, 26 Aug 2011 17:30:12 GMT 
Server: Apache/2.2.17 (Unix) DAV/2 Content-Length: 144 
X-Powered-By: Servlet/2.5 JSP/2.1 Cache-Control: no-store, no-cache 
Vary: Accept-Encoding,User-Agent Pragma: no-cache 
Content-Type: application/xml 202

使用返回的XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<status xmlns="http://jaxb.rest.pageone.com" description="No Devices to add">202</status>

據我所知,我肯定在訪問服務器,但是它似乎沒有收到我發送的數據。

難過 希望有人能指出正確的方向!

干杯,

看起來像是您在服務器上,並且可能是數據將要到達...我認為答案在於202:No Devices to add ... REST接口文檔應解釋(也許您缺少必填字段?) {202 FYI表示已接受,但未完成任何處理,也可能意味着該用戶存在}

順便說一句,您應該轉義要放入POST負載中的那些參數( $fname$sname$pass$phonenumber )...否則,怪異的值(例如name)可能導致帖子的行為與您期望的方式。 您可以使用urlencode來實現,也可以使用http_build_query構建POST字符串

<?php
$fields_string=http_build_query(array(
   "firstName"=>$fname,
   "secondName"=>$sname,
   "password"=>$pass,
   "deviceAddress"=>$phonenumber,
   "notes"=>"testing"));
//...
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM