【问题标题】:curl request through TLS v1.0通过 TLS v1.0 的 curl 请求
【发布时间】:2018-03-13 21:45:01
【问题描述】:

使用以下代码通过 TLS v1.0 发送请求。

$url = "https://example.com";
$input_segment = "";

$data = array('InputSegments'=>$input_segment, 'cmdSubmit'=>'Submit');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
curl_setopt($ch, CURLOPT_PORT, "443");
curl_setopt($ch, CURLOPT_SSLVERSION, 4);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                        'Content-Type: application/x-www-form-urlencoded'
                                        ));
$response = curl_exec($ch);
$info = curl_getinfo($ch);
$err_no = curl_errno($ch);
$err = curl_error($ch);
curl_close($ch);
var_dump($response);

错误

错误 #:SSL 读取:错误:00000000:lib(0):func(0):reason(0), errno 104

看起来仍在使用 SSL。如何在 PHP 中通过 TLSv1.0 发送 curl 请求?

【问题讨论】:

  • 尝试使用常量 CURL_SSLVERSION_TLSv1_0 而不是 4。同时设置 CURLOPT_USE_SSL 以强制使用请求的 TLS(或 SSL),否则失败。
  • @UnamataSanatarai:服务器问题是指第三方方面的问题还是我需要从我这边解决的问题?
  • @LordNeo:用这两行更新了请求:curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0); curl_setopt($ch, CURLOPT_USE_SSL, "TLS"); 仍然是相同的结果
  • 可能是你的服务器,也可能是对方。正如 github 上的票所说 - 不太确定。

标签: php curl


【解决方案1】:

要强制 TLS 1.0,我认为将 CURLOPT_SSLVERSION 设置为 CURL_SSLVERSION_TLSv1_0 就足够了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-18
    • 2017-11-21
    • 2018-06-21
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2015-03-02
    相关资源
    最近更新 更多