【问题标题】:PHP cURL returns 400 on serverPHP cURL 在服务器上返回 400
【发布时间】: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,但仅此而已。

标签: php curl


【解决方案1】:

您的 URL 包含 https://,这就是它不适合您的原因。

如果数据安全对您来说不是问题,那么您可以使用以下选项为 ssl 使用不安全通信。

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);

【讨论】:

  • 是的!有效!尽管在弄乱代码时,我注意到如果我将查询更改为仅输出 1 个 url(限制 1),它将返回 200,即使它与选择时返回 400 的 url 相同 *
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 2016-04-28
  • 2019-07-10
  • 2011-08-05
  • 1970-01-01
  • 2012-03-10
相关资源
最近更新 更多