如何在php中重新创建这个curl命令?

时间:2014-12-17 19:00:16

标签: php curl reverse-engineering

我正在尝试对api进行逆向工程,因为我们的软件提供商缺少文档,我需要在php中重新创建curl命令。有问题的命令是:

curl -v -X POST -H Accept-Encoding:"gzip" -H deviceId:"someID" -H appBuildDate:"2014-12-11 15:56:52 +0000" -H systemName:"iPhone OS" -H appBuildNumber:"44" -H platform:"iPhone5,2" -H Content-Type:"application/xml" -H model:"iPhone" -H name:"iphone" -H systemVersion:"8.1.2" -H Authorization:"Token someToken" -H appVersion:"6.8" https://soemsub.somedomain.com/ws/orders/search -d "<orderSearch><consigneeSearch /><customerSearch /><shipperSearch scheduledArrivalEarly=\"12/17/2014\" /></orderSearch>"

我遇到的唯一问题是我不确定为-d命令设置的选项。

我已将CURLOPT_POST设置为trueCURLOPT_POSTFIELDS使用:

$query = "<orderSearch><consigneeSearch /><customerSearch /><shipperSearch scheduledArrivalEarly=\"$date\" /></orderSearch>";
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $query);

我也尝试过:

curl_setopt($this->curl, CURLOPT_POSTFIELDS, array($query));

我没有得到有效回复。是否有一个技巧让这个正确发布?我在顶部概述的命令按原样写入日志文件中(除了deviceId和Authorization),但我不确定是否可以指定没有帖子的帖子&#34; name&#34;就像我在HTML表单中所做的那样。据我所知,我需要key=>value对。

我错过了什么吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

在键值周围没有任何引号设置标题:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Authorization:Token someToken',
  'deviceId:someID',
  // ... all the other headers
));

而不是:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  'Authorization:"Token someToken"',
  'deviceId:"someID"',
  // ... all the other headers
));

如果将POSTFIELDS与字符串体一起使用,则需要对其进行urlencode:

$query = "<orderSearch><consigneeSearch /><customerSearch /><shipperSearch scheduledArrivalEarly=\"$date\" /></orderSearch>";
curl_setopt($this->curl, CURLOPT_POSTFIELDS, urlencode($query));

请参阅另一个问题:Should I URL-encode POST data?

  

要在HTTP“POST”操作中发布的完整数据。要发布文件,   使用@预先添加文件名并使用完整路径。文件类型可以是   通过跟随文件名中的类型明确指定   format'; type = mimetype'。此参数可以作为a传递   urlencoded字符串,如'para1 = val1&amp; para2 = val2&amp; ...'或作为数组   字段名称为键,字段数据为值。如果value是一个数组,   Content-Type标头将设置为multipart / form-data