【发布时间】:2014-03-26 18:26:08
【问题描述】:
我有一些通过 php curl 运行的 URL,以便我可以获取 HTTP 代码。有趣的是,一些 URL 工作正常并返回 200,但其他 URL 总是返回 400。问题仅在我从数据库提供 URL 时存在,如果我通过硬编码运行它,那么它应该返回 200。
我已经尝试过 urlencoding/decoding,但这不是问题。它的外观看起来不错。我发现的一件奇怪的事情是 400 URL 总是有一个[content_type] => text/html; charset=iso-8859-1。 url 也很简单https://sometext.something.something/test 并且没有任何参数
这是我一直在运行 URL 的 PHP 代码。它在我的本地主机上运行得很好,但在服务器上它会导致问题。
function checkStatus($url) {
$urlencode=urlencode($url);
foreach (explode('&', $urlencode) as $chunk) {
$param = explode("=", $chunk);
if ($param) {
echo urldecode($param[0]);
$ch = curl_init(urldecode($param[0]));
}
}
//$ch = curl_init($urlencode);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// curl_setopt($ch, CURLOPT_TIMEOUT, 10);
// curl_setopt($ch, CURLINFO_CONTENT_TYPE, true);
// curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:text/html;charset=UTF-8'));
curl_exec($ch);
$returnCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error_report= curl_getinfo($ch);
print_r($error_report);
curl_close($ch);
return $returnCode;
}
这是错误消息的示例:
Array
(
[url] => https://url.net/something
[content_type] => text/html; charset=iso-8859-1
[http_code] => 400
[header_size] => 171
[request_size] => 83
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.056926
[namelookup_time] => 0.003457
[connect_time] => 0.004276
[pretransfer_time] => 0.01614
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => 0
[starttransfer_time] => 0.056906
[redirect_time] => 0
[certinfo] => Array
(
)
)
【问题讨论】:
-
你试过用 parse_url 代替 urlencode / urldecode 吗?
-
@Arkadiusz'flies'Rzadkowolski 不,我没有。现在测试。编辑:嗯,我不太确定它在这里有什么帮助。它以预期的格式返回 url,但仅此而已。