我正在尝试使用GuzzleHttp从projectA向projectB发出POST请求。这两个项目都在同一个Homestead实例上运行。问题是端点没有得到请求。
Windows 主机文件:
192.168.10.10 projectA.local
192.168.10.10 projectB.local
projectA中的 GuzzleHttp调用:
$this->httpClient = new Client(array(
'base_uri' => 'http://projectB.local/api/'
));
$response = $this->httpClient->post('create-user', array('form_params' => $this->params));
return $response->getStatusCode();
在projectB中调试:
public function createUser(Request $request) {
Logger::debug('API call received'); // custom logging of the call in the database
}
现在,此API调用永远不会记录在数据库中。 projectA发送请求,但projectB没有收到请求。
我确认的内容:
$this->params
设置正确(这些是POST参数)200
我错过了什么?是不是可以从另一个项目中调用一个Homestead项目?
更新 - 来自Homestead的配置
的/ etc /主机
127.0.0.1 homestead homestead
127.0.0.1 localhost
127.0.1.1 vagrant.vm vagrant
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
的/etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.0.2.3
的/etc/nsswitch.conf
> grep hosts /etc/nsswitch.conf
> hosts: files dns
主持人检查
> host projectB.local
> Host projectB.local not found: 4(NOTIMP)
> Host projectB.local not found: 4(NOTIMP)
答案 0 :(得分:0)
好的,我开始认为在达到端点之前可能会破坏API调用。我有一些全局中间件在每个请求上运行(例如VerifyCsrfToken
)。
我确保我的端点路径被排除在中间件的处理之外,就是这样:
if (!$request->is('api/*)) {
// handle...
}
具体来说,在VerifyCsrfToken
中间件中,您可以使用提供的字段:
protected $except = [
'api/*'
];
听起来很明显,现在几乎令人作呕。