如何获取 curl exec 响应
How to obtain curl exec response
我正在开发一个 PHP 脚本:
- 从数据库中获取 10 行(效果很好)
- 将这些行中的地址发送到地图 API
- 获取数据
- 将结果保存在数据库中(效果很好)
I don't know how to obtain the final response of curl_exec. curl_exec
in $response = call('GET', $query);
- even when hasn't completed returns something in response.
这些我的循环正在等待调用函数的响应。但它不起作用 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;
}
}
这是我的 curl 调用函数
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);
请帮忙。解决了半天
所以 var_dump( $response )
的结果是一个空字符串?
在那种情况下,它只是意味着来自服务器的响应是空的,因为我刚刚测试了你的功能 call()
并且它似乎工作正常。换句话说,确保您尝试调用的 URL(使用 GET 方法)实际上是 returns 数据开头。
如果您只是在 URL 中的某处出现印刷错误,我不会感到惊讶。
另外,为了调试,暂时替换
return curl_exec($ch);
和
$result = curl_exec($ch);
var_dump(curl_getinfo($ch));
return $result;
并调查 var_dump()
结果中的信息,以确保响应代码是 200
(或任何其他指示成功的代码)而不是 4xx
或 5xx
范围(分别表示客户端或服务器错误),例如。
请参阅 curl_getinfo()
了解有关将返回有关您上次 curl
转账的有用信息的更多信息。
解决 OP 评论:
请尝试这个完整的脚本(没有别的:没有 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;
如果 var_dump( $response );
returns 是一个空字符串,这意味着您的脚本工作正常,但您调用的 URL 只是返回了一个空响应。
如果$response
不是空的并且实际包含JSON数据,替换
var_dump( $response );
和
$stringJSON = mb_convert_encoding( $response, "UTF-8" );
echo $stringJSON; // make sure this contains valid JSON data
// stripslashes() should not be needed
var_dump( json_decode( $stringJSON ) ); // if JSON data was valid, you should get a valid PHP data structure
我正在开发一个 PHP 脚本:
- 从数据库中获取 10 行(效果很好)
- 将这些行中的地址发送到地图 API
- 获取数据
- 将结果保存在数据库中(效果很好)
I don't know how to obtain the final response of curl_exec. curl_exec in $response = call('GET', $query); - even when hasn't completed returns something in response.
这些我的循环正在等待调用函数的响应。但它不起作用 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;
}
}
这是我的 curl 调用函数
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);
请帮忙。解决了半天
所以 var_dump( $response )
的结果是一个空字符串?
在那种情况下,它只是意味着来自服务器的响应是空的,因为我刚刚测试了你的功能 call()
并且它似乎工作正常。换句话说,确保您尝试调用的 URL(使用 GET 方法)实际上是 returns 数据开头。
如果您只是在 URL 中的某处出现印刷错误,我不会感到惊讶。
另外,为了调试,暂时替换
return curl_exec($ch);
和
$result = curl_exec($ch);
var_dump(curl_getinfo($ch));
return $result;
并调查 var_dump()
结果中的信息,以确保响应代码是 200
(或任何其他指示成功的代码)而不是 4xx
或 5xx
范围(分别表示客户端或服务器错误),例如。
请参阅 curl_getinfo()
了解有关将返回有关您上次 curl
转账的有用信息的更多信息。
解决 OP 评论:
请尝试这个完整的脚本(没有别的:没有 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;
如果 var_dump( $response );
returns 是一个空字符串,这意味着您的脚本工作正常,但您调用的 URL 只是返回了一个空响应。
如果$response
不是空的并且实际包含JSON数据,替换
var_dump( $response );
和
$stringJSON = mb_convert_encoding( $response, "UTF-8" );
echo $stringJSON; // make sure this contains valid JSON data
// stripslashes() should not be needed
var_dump( json_decode( $stringJSON ) ); // if JSON data was valid, you should get a valid PHP data structure