PHP 发送自定义的 HTTP 请求

3

我可以如何向URL为"http://[IP]:[Port]/"的服务器发送自定义HTTP请求?

我的意思是,不是像这样的普通GET或POST:

GET /index.html HTTP/1.1
Host: www.example.com

如何用类似以下内容替换它:

CUSTOM
Host: [IP]

如果需要,我不介意使用任何其他库,比如cURL。

更新:

我尝试使用以下cURL代码:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://[IP]:[Port]/");
curl_setopt($ch, CURLOPT_PORT, [Port]);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "CUSTOM");

$output = curl_exec($ch);
curl_close($ch);      

print($output);

但是当我使用CURLOPT_CUSTOMREQUEST时,它只是持续加载了2分钟,直到显示内部错误。然而,如果我使用像http://google.com这样的标准网站,它就可以正常工作。

还有我忘了提到,我的服务器使用的端口是7899,这样可以吗?在我的浏览器中打开它很好,但cURL似乎无法使用。


1
RTLM: http://php.net/manual/zh/function.stream-context-create.php 和/或 http://php.net/manual/zh/function.curl-setopt.php(查找 CURLOPT_CUSTOMREQUEST) - Marc B
这可能会引起您的兴趣:http://php.net/manual/en/function.http-request.php - Phil Cross
1
只是一些学术上的批判:如果第一行不是 "方法 请求-URI HTTP版本",那么它就不是HTTP。 RFC 2616 第5.1节。 - RichieHindle
2个回答

2

看起来你的代码没有问题。如果你正在使用共享托管提供者,请要求他们打开出站TCP端口7899。


0
您可以使用http_request_method_register函数创建自定义的HTTP请求方法:

http://www.php.net/manual/en/function.http-request-method-register.php

这段代码需要在处理请求的服务器上运行。如果您尝试在任何旧服务器上使用非标准的HTTP请求方法,根据服务器的不同,它可能会忽略它,或者返回一个错误代码。


很不幸,我似乎无法安装 http_pecl,这是此功能所需的。因此,我现在必须寻找替代方案。 - Jimmay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接