guzzle 6.3版
如果我在课堂上有这个
课程CURL {
public static function get($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //<------ Note HERE
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
return $result;
}
如果我在课堂上有这个
<?php
namespace App;
use Request,Auth;
use App\Log, App\Helper;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
use GuzzleHttp\FORCE_IP_RESOLVE;
use GuzzleHttp\DECODE_CONTENT;
use GuzzleHttp\CONNECT_TIMEOUT;
use GuzzleHttp\READ_TIMEOUT;
use GuzzleHttp\TIMEOUT;
use GuzzleHttp\VERIFY;
class CURL {
$client = new Client();
$options = [
'http_errors' => false,
'force_ip_resolve' => 'v4',
'connect_timeout' => 10,
'read_timeout' => 10,
'timeout' => 10,
'verify' => false
];
$result = $client->request('GET',$url,$options);
$result = json_decode((string) $result->getBody(), true);
return $result;
...
}
如您所见,我已尝试设置'verify' => false
。
我得到了
添加'curl' => [ CURLOPT_SSL_VERIFYPEER => false ]
$client = new Client();
$options = [
'http_errors' => false,
'force_ip_resolve' => 'v4',
'connect_timeout' => 10,
'read_timeout' => 10,
'timeout' => 10,
'verify' => false,
'curl' => [ CURLOPT_SSL_VERIFYPEER => false ]
];
$result = $client->request('GET',$url,$options);
$result = json_decode((string) $result->getBody(), true);
return $result;
我得到了
删除'force_ip_resolve' => 'v4',
$client = new Client();
$options = [
'http_errors' => false,
'connect_timeout' => 10,
'read_timeout' => 10,
'timeout' => 10,
'verify' => false
];
$result = $client->request('GET',$url,$options);
$result = json_decode((string) $result->getBody(), true);
return $result;
我得到了
添加此行$result = $result->getCurlOptions()->set(CURLOPT_SSL_VERIFYPEER, FALSE);
$client = new Client();
$options = [
'http_errors' => false,
'force_ip_resolve' => 'v4',
'connect_timeout' => 10,
'read_timeout' => 10,
'timeout' => 10,
'verify' => false
];
$result = $client->request('GET',$url,$options);
$result = $result->getCurlOptions()->set(CURLOPT_SSL_VERIFYPEER, FALSE);
$result = json_decode((string) $result->getBody(), true);
return $result;
我得到了
调用未定义的方法GuzzleHttp \ Psr7 \ Response :: getCurlOptions()
如何继续进行调试?
我现在可以接受任何建议。
任何提示/建议/帮助都将非常感谢!
答案 0 :(得分:1)
这里的问题是$ url不是一个有效的url,事实上,你的$ url变量似乎包含html。然后你告诉curl连接到...这个html,作为一个网址,curl说它无法找到该域名。尝试提供一个有效的网址(例如,hhtp://example.org
)作为$ url参数,它应该可以正常工作。
答案 1 :(得分:1)
这里的问题是您尝试在响应上设置验证选项,至少对于您的第三个示例
您可以在guzzle中禁用ssl验证,如下所示:
$client->getHttpClient()->setDefaultOption('verify', false);
- 实际上,你已经拥有了,所以从理论上讲,你甚至不需要这条线:
$result = $result->getCurlOptions()->set(CURLOPT_SSL_VERIFYPEER, FALSE);
对于#2,curl表示您将页面的HTML传递给get方法,而不是URL,因此未知主机错误。
您还在响应正文中调用json_decode,这不是文本,您需要$response->getBody()->getContents();
,就像这样
public static function get($url){
$options = [
'http_errors' => false,
'force_ip_resolve' => 'v4',
'connect_timeout' => 10,
'read_timeout' => 10,
'timeout' => 10,
'verify' => false
];
$client = new Client($options);
$result = $client->request('GET',$url);
$result = json_decode($result->getBody()->getContents(), true);
return $result;
}
答案 2 :(得分:1)
你在所有Guzzle的例子中都有'force_ip_resolve' => 'v4',
,但cURL示例没有相同的选项。尝试删除它,除非你真的需要它。