我正在开发一个PHP脚本:
我不知道如何获得curl_exec的最终响应。 curl_exec 在$ response = call('GET',$ query); - 即使没有完成也会回复一些东西。
这些我的循环正在等待调用函数的响应。但是它不起作用json_decode($ stringJSON)是在获得最终响应之前调用的
$requestHandled = false;
$response = "";
$response = call('GET', $query);
while(!$requestHandled) {
if(strlen($response) > 5){
$response = mb_convert_encoding($response, "UTF-8");
$stringJSON = get_magic_quotes_gpc() ? stripslashes($response) : $response;
echo $stringJSON;
$jsonObject = "+";
echo $jsonObject;
$jsonObject = json_decode($stringJSON);
echo $jsonObject;
$requestHandled = true;
}
}
这是我的卷曲调用函数
function call($method, $url, $data = false) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_URL, $url);
if ($data) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Content-Length: ' . strlen($data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
return curl_exec($ch);
请帮忙。已经花了半天时间来解决它
答案 0 :(得分:1)
所以var_dump( $response )
的结果是一个空字符串?
在这种情况下,它只是意味着来自服务器的响应是空的,因为我刚测试了你的函数call()
,它似乎工作正常。换句话说,确保您尝试调用的URL(使用GET方法)实际上返回数据开始。
如果您只是在网址的某个地方出现打字错误,我不会感到惊讶。
另外,出于调试目的,暂时替换
return curl_exec($ch);
与
$result = curl_exec($ch);
var_dump(curl_getinfo($ch));
return $result;
并调查var_dump()
结果中的信息,以确保回复代码为200
(或任何其他表示成功的代码),而不是4xx
或{{1}例如,范围(分别表示客户端或服务器错误)。
有关上次5xx
转移的有用信息,请参阅curl_getinfo()
。
解决OPs评论:
请尝试使用此完整脚本(没有其他内容:没有curl
循环,没有while
,没有stripslashes()
等等:
json_decode()
如果<?php
function call($method, $url, $data = false) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($ch, CURLOPT_URL, $url);
if ($data) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Content-Length: ' . strlen($data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
var_dump(curl_getinfo($ch)); // check this result and make sure the response code is 200
return $result;
}
$query = 'fill in the correct URL! (with http(s)://)';
$response = call('GET', $query);
var_dump( $response ); // check this result and see if it's an empty string
die;
返回一个空字符串,则表示您的脚本正常工作,但您调用的URL只返回一个空响应。
如果var_dump( $response );
不为空且实际包含JSON数据,请替换
$response
与
var_dump( $response );