【问题标题】:CURL not giving me any responseCURL 没有给我任何回应
【发布时间】:2017-01-26 20:29:58
【问题描述】:

我正在使用 PHP CURL 进行 RESTFUL API 调用。这是我的功能

$datastr = '{"Params": { "Dawar Khan": "", "Email": "ali.zia.1991@gmail.com", "MobileNumber": "36566339", "UserType": "G0", "IDNumber": "881041106", "IDExpiry": "03/01/2022", "DOB": "03/03/1988" }, "AccountID": "SHIP2YOUTST", "SecureHash": "53019EB8CA831A8D170C016A6550033A5B74D1B1A45F832560300756A02DB3F9"}';
$url = 'https://myurl.com';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_PORT, 443);
curl_setopt($ch, CURLOPT_POSTFIELDS, $datastr);
$result = curl_exec($ch);
curl_close($ch);

$json_result = json_decode($result, true);
print_r($json_result);

编辑

将 var_dump 添加到结果中给了我这个。

字符串(2738)“

请求错误

服务器在处理请求时遇到错误。异常消息是“传入消息具有意外消息格式“原始”。该操作的预期消息格式为“Xml”、“Json”。这可能是因为尚未在绑定上配置 WebContentTypeMapper。有关详细信息,请参阅 WebContentTypeMapper 的文档。有关详细信息,请参阅服务器日志。

我如何知道我的字符串已发布到 url 并且响应已经到来? $datastr 必须是字符串还是 json?请指导我。谢谢。

【问题讨论】:

  • 执行 $result = curl_exec($ch); var_dump($result);告诉我你有什么事情
  • @Eric 我明白了。字符串(2738)“请求错误服务器在处理请求时遇到错误。异常消息是'传入的消息具有意外的消息格式'原始'。操作的预期消息格式是'Xml','Json'。这个可能是因为尚未在绑定上配置 WebContentTypeMapper。有关详细信息,请参阅 WebContentTypeMapper 的文档。'。有关更多详细信息,请参阅服务器日志。
  • 请将 curl 回复添加到您的问题中。 (var_dump)
  • @Ibu 更新了问题
  • @AliZia,您需要添加一个 json 标头,因为您的服务器需要 XML 或 JSON 格式的数据。见费利佩的回答

标签: php curl


【解决方案1】:

你需要添加这个标题:

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($datastr))
); 

根据您的回复:

操作的预期消息格式为“Xml”、“Json”。

您得到的响应表明您使用的 API 需要 XMLJSON。将内容类型设置为其中一种应该可以解决问题。

【讨论】:

  • 它有效。谢谢分配。但是我能得到一点解释吗?
  • 这将告诉其他站点您的内容类型是 JSON,而不是 HTML 或 mp3 文件,然后正确解析。这就是 HTTP 协议的工作方式,以及端点实现 REST API 的方式。我不知道那么多,你会在这里做一些研究。
  • @Ibu 很好的观察
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 2018-03-20
  • 1970-01-01
  • 2021-08-25
  • 2022-01-11
  • 1970-01-01
相关资源
最近更新 更多