因此,我们正在使用PHP构建一个Web应用程序,并且正在尝试向外部API发出请求。问题是我们遇到卷曲错误:
cURL错误7:无法连接到external.api.com端口443:无法路由到主机
现在有一点背景。
我设法使它在两个不同的开发环境上运行,但不在生产环境上运行。我怀疑问题出在Apache的配置中,好像我们没有使它可用于向某些IP或端口发出请求一样。我不知道如何检查。我已经读到我可能必须更改文件/ etc / network / interface,但是我没有找到关于该写什么的任何信息。
我也读过我必须跑来$ netstat -rn寻找答案,但是我不确定在那里要看什么。
编辑:
没有任何参数和任何内容,甚至无法发出简单的get请求。但是我可以向https://google.com和https://facebook.com发出请求。会在后面写更多。
我被困在这里从2-3小时开始尝试.
我有很多关系:
class Category extends Model
{
public function news()
{
return $this->belongsToMany('App\News');
}
}
class News extends Model
{
public function categories()
{
return $this->belongsToMany('App\Category');
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取相关类别的最新5条新闻:
$front_categories = Category::with(array(
'news'=>function($query){
$query->where('publish','1')->orderBy('created_at', 'desc')->take(5);}))
->where('in_front', 1)->get();
Run Code Online (Sandbox Code Playgroud)
上面的查询对我不起作用,它总共给出了五个结果,而不是每个类别的5个结果.
我会解释一下情况。
简而言之,我已经收到了 ssl 证书,我需要将其包含在一些 HTTP 请求中。而且我还没有成功地做到这一点。
我正在使用Guzzle来提出请求。
我已收到以字符串形式开头的证书
-----BEGIN CERTIFICATE-----
并以
-----END CERTIFICATE-----。
首先,我不是 100% 确定,我必须如何处理它才能使其准备好包含在请求中。我将其保存为mycert.crt文件。正如 Guzzle 文档提到的,他们需要一个 .pem 文件,我研究了将 .crt 文件转换为 .pem 文件。找到了这个 stackoverflow 线程,尝试了它们,但它不起作用(顺便说一句,.crt 和 .pem 内容是相同的)。让我解释一下,什么不起作用。
我制造了一个
$client = new GuzzleHttp\Client(['base_uri' => 'https://theuri.com']);
$client->request('GET', 'getit', ['cert' => 'path/to/mycert.pem' ]);
Run Code Online (Sandbox Code Playgroud)
结果是
[GuzzleHttp\Exception\ConnectException]
cURL error 35: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
Run Code Online (Sandbox Code Playgroud)
我读到,当您在使用证书发出请求的整个过程中搞砸了某些事情时,这是一些标准错误。
我还有 private.key 文件和 request.csr,它们用于创建 SSL 密钥。不确定我现在是否需要对这些做任何事情。
我在网上没有找到太多有用的信息。我发现的线程或文章没有从头到尾解释整个过程,所以我对我尝试过的任何方法都没有信心。
编辑:
我发现我可能应该使用
$client->request('GET', '/getit', ['verify' => 'path/to/mycert.pem'])
Run Code Online (Sandbox Code Playgroud)
它给了我例外
GuzzleHttp\Exception\ConnectException with message …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Tinker 中向外部 API 发出请求。由于响应是一个很长的错误,因此它只显示错误的开头,如下所示:
客户端错误:
POST https://foreign.api/w00t导致400 Bad Request响应:Apache Tomcat/8.0.32 - 错误报告H1 {font-family:Taho(已截断...)
就这样。有没有办法让 Tinker 返回整个响应?