使用Apache或Ngnix我总是根据实际项目创建开发站点,例如http://project1.loc,在添加到我的.hosts文件后,浏览器使用没有问题.
但是,当我尝试向http://project1.loc/post.json同一个URL 发出一个cURL request()时,除了超时之外我什么也得不到.我假设cURL不关心我的自定义主机,直接进入名称服务器获取它的信息.
我怎样才能解决这个问题?
更新 我设置了一个自定义标题"HOST:http://project1.loc ",现在我得到了400个错误 - 但它们是瞬时的,所以我假设cURL至少使用了hosts文件......
Joh*_*art 393
实际上,curl有一个明确的选项: --resolve
代替 curl -H 'Host: yada.com' http://127.0.0.1/something
使用 curl --resolve 'yada.com:80:127.0.0.1' http://yada.com/something
你问的有什么区别?
其中,这适用于HTTPS.假设您的本地服务器具有证书yada.com,上面的第一个示例将失败,因为yada.com证书127.0.0.1与URL 中的主机名不匹配.
第二个示例适用于HTTPS.
从本质上讲,通过"主机"标题-H会将您的主机入侵到标头集,但绕过所有curl的主机特定情报.使用--resolve所有适用的常规逻辑,但只是假装DNS查找返回命令行选项中的数据.它的工作原理就像/etc/hosts应该.
注意--resolve需要一个端口号,因此对于您将使用的HTTPS
curl --resolve 'yada.com:443:127.0.0.1' https://yada.com/something
Bru*_*uno 120
编辑:虽然这是目前接受的答案,但读者可能会发现用户John Hart的其他答案更适合他们的需求.根据用户Ken的说法,它使用了一个选项,该版本在版本7.21.3(2010年12月发布,即在此初始答案之后)中引入.
在您编辑的问题中,您使用URL作为主机名,而它只需要是主机名.
尝试:
curl -H 'Host: project1.loc' http://127.0.0.1/something
Run Code Online (Sandbox Code Playgroud)
这里project1.loc是只是主机名,127.0.0.1是目标的IP地址.
(如果你使用curl从库中,而不是在命令行上,确保你没有把你http://的Host头.)
为了在尚未通过 DNS 连接的 Apache http 服务器上设置虚拟主机,我喜欢使用:
curl -s --connect-to ::host-name: http://project1.loc/post.json
Run Code Online (Sandbox Code Playgroud)
其中主机名是运行 Web 服务器的计算机的 IP 地址或 DNS 名称。这也适用于 https 站点。
| 归档时间: |
|
| 查看次数: |
123466 次 |
| 最近记录: |