测试在Laravel Homestead上运行的两个本地项目之间的API调用

时间:2017-06-02 09:13:32

标签: php laravel laravel-5.2

我正在尝试使用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参数)
  • 端点URI正确(http://projectB.local/api/create-user
  • 端点存在于projectB中,可访问并响应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)

1 个答案:

答案 0 :(得分:0)

好的,我开始认为在达到端点之前可能会破坏API调用。我有一些全局中间件在每个请求上运行(例如VerifyCsrfToken)。

我确保我的端点路径被排除在中间件的处理之外,就是这样:

if (!$request->is('api/*)) {
    // handle...
}

具体来说,在VerifyCsrfToken中间件中,您可以使用提供的字段:

protected $except = [
    'api/*'
];

听起来很明显,现在几乎令人作呕。