PHP cURL发送到端口8080

PHP cURL发送到端口8080,php,curl,port,Php,Curl,Port,今天我尝试对某个正在收听端口8080的站点进行curl调用。但是,这样的调用会被发送到端口80,而不是8080: $ch = curl_init(); curl_setopt($ch, CURLOPT_PORT, 8080); curl_setopt($ch, CURLOPT_URL, 'http://somesite.tld:8080'); curl_setopt($ch, CURLOPT_POST, count($data)); curl_setopt($ch, CURLOPT_POSTFI

今天我尝试对某个正在收听端口8080的站点进行curl调用。但是,这样的调用会被发送到端口80,而不是8080:

$ch = curl_init();
curl_setopt($ch, CURLOPT_PORT, 8080);
curl_setopt($ch, CURLOPT_URL, 'http://somesite.tld:8080');
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$target_response = curl_exec($ch);
curl_close($ch);

我在这里遗漏了什么吗?

请注意,我以前遇到过这个问题,因为我使用的web主机除了标准的80和443(HTTPS)之外,还阻止了出站端口。所以你可能想问他们或者做一般测试。事实上,有些主机甚至会出于安全考虑阻止端口80上的出站。

您是否尝试通过SSH连接到运行此功能的服务器并验证iptables规则,和/或尝试通过telnet连接到目标服务器

sh
telnet somesite.tld 8080


如果没有其他问题,它将帮助您解决问题并消除网络问题。

首先检查您是否能够使用PHP可怕的Curl语法以外的其他东西进行连接:

  • 如果你在本地机器上
否则请查看使用(针对linux用户)

  • 地点:8080
  • wget-qO-somesite:8080
一旦建立了连接,就可以开始使用PHP Curl了。有包装纸,但我发现它们是片状的

Curl、Wget或类似的方法都可以很容易地配置为使用GET和POST方法。这是不可取的,但对于使用Curl进行的不止一个复杂操作,我已经放弃了正确配置PHP库的尝试,而直接转到命令行

这涉及到安全问题。您需要非常小心,以确保您提供的任何内容(尤其是来自表单或外部源的内容)都被适当转义

<? 

//Strip out any possible non-alpha-numeric character for security

$stringToSend = preg_replace('[^a-zA-Z]', '', $stringToSend);

$return = shell_exec("curl -X POST -d $stringToSend http://example.com/path/to/resource");

为curl尝试此选项

curl_setopt($ch, CURLOPT_PROXY,"localhost:8080");
还是用这个

curl_setopt($ch, CURLOPT_PROXY,"yourservername:8080");

您的web服务器配置错误。你提供的代码对我有用

此外,您的代码可以更简单。只需将URI放入init调用并删除
CURLOPT_端口
CURLOPT_URL
行:

$ch=curl\u init('http://somesite.tld:8080');


您确定要加入的服务器没有防火墙吗?Selinux被禁用了吗?

您可以使用 --本地端口[-num]

设置用于连接的首选本地端口号或范围。请注意,端口号本质上是一种稀缺资源,有时会很忙,因此将此范围设置得太窄可能会导致不必要的连接设置失败。(在7.15.2中添加)


来源:

Simple CURL
GET
request:(如果需要,还添加了json/标题,以使您在需要时的生活更轻松)

字符集不是必需的HTTP头,其他字符集也是,重要的字符集是内容类型

对于我使用的JSON MIME类型的示例,您可以随意使用,请查看以下链接:

确保在php上启用了
php_curl.dll
扩展,并且目标服务器上的端口已打开


希望这有帮助。

您可以尝试作为url。我已经问过他们,并告诉我它是开放的。顺便说一句,如果指定的端口被锁定,curl请求会默认为端口80吗?是什么让您认为它们指向端口80而不是端口8080?您是否绝对确定在CURLOPT_端口中指定的var是8080?因为它应该可以工作,或者使用CURLOPT_port设置端口并在CURLOPT_URL中使用不带端口号的URL,或者在CURLOPT_URL中指定完整的URL(包括端口),而不使用CURLOPT_port。@wimvds:因为远程服务器也侦听端口80,但输出不同的响应。假设端口80回复1,端口8080回复0。我期望的答复应该是0,但我得到的却是1@kamil&arvin:我会试试。要调试这些问题,您可以添加curl_setopt($ch,CURLOPT_VERBOSE,1),并在web服务器错误日志中查看调试信息。确切地说,990是标准的?更正为443。抱歉,那天我和FTPS打交道,打错了号码。是的,这很有效,但不一定“更简单”。它为您节省了一行代码,但以可读性和可扩展性为代价。
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "your-domain-name");
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); `
?>
// Use PHP cURL to make a request to port 8080 on a server

$ch = curl_init();
curl_setopt($ch, CURLOPT_PORT, 8080);
curl_setopt($ch, CURLOPT_URL, 'http://somesite.tld:8080');
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$target_response = curl_exec($ch);
curl_close($ch);

curl_setopt($ch, CURLOPT_URL, 'http://somesite.tld:8080');


PHP cURL sending to port 8080
$ch = curl_init();
curl_setopt($ch, CURLOPT_PORT, 8080);
curl_setopt($ch, CURLOPT_URL, 'http://somesite.tld:8080');
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$target_response = curl_exec($ch);
curl_close($ch);

curl_setopt($ch, CURLOPT_URL, 'http://somesite.tld:8080');
<?php
$chTest = curl_init();
curl_setopt($chTest, CURLOPT_URL, "http://example.com:8080/?query=Hello+World");
curl_setopt($chTest, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8', 'Accept: application/json'));
curl_setopt($chTest, CURLOPT_HEADER, true);
curl_setopt($chTest, CURLOPT_RETURNTRANSFER, true);

$curl_res_test = curl_exec($chTest);
$json_res_test = explode("\r\n", $curl_res_test);

$codeTest = curl_getinfo($chTest, CURLINFO_HTTP_CODE);
curl_close($chTest);
?>
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com:8080');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8', 'Accept: application/json'));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"Hello" : "World", "Foo": "World"}');
// Set timeout to close connection. Just for not waiting long.
curl_setopt($ch, CURLOPT_TIMEOUT, 10);

$curl_res = curl_exec($ch);
?>