PHP cURL发送到端口8080

时间:2011-06-09 08:10:31

标签: php curl port

今天我正在尝试对正在侦听端口8080的某个网站进行卷曲调用。但是,这样的调用会被发送到端口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);
我在这里错过了一些东西吗?

10 个答案:

答案 0 :(得分:2)

请注意,之前我遇到过此问题,因为我使用的网络主机阻止了标准80和443(HTTPS)之外的出站端口。所以你可能想问他们或做一般测试。实际上,为了安全起见,一些主机甚至经常在端口80上阻止出站。

答案 1 :(得分:1)

// 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');

答案 2 :(得分:0)

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

sh telnet somesite.tld 8080

如果不出意外,它将有助于解决您的问题并消除网络问题。

答案 3 :(得分:0)

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

否则看看使用(对于linux用户)

  • curl somesite: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");

答案 4 :(得分:0)

您的网络服务器配置错误。您提供的代码适合我。

此外,您的代码可以更简单。只需将URI放入init调用中,然后删除CURLOPT_PORTCURLOPT_URL行:

$ch = curl_init('http://somesite.tld:8080');

答案 5 :(得分:0)

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

答案 6 :(得分:0)

你可以使用Maby --local-port [-num]

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

来源:http://curl.haxx.se/docs/manpage.html#--ftp-pasv

答案 7 :(得分:0)

简单CURL GET请求:(如果需要,还添加了json / headers,以使您的生活更轻松)

<?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);
?>

示例POST请求:

<?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);
?>

Charset 不是必需的HTTP标头,其他标头也是如此,重要的是 Content-Type

对于我使用JSON MIME类型的示例,您可以使用您想要的任何内容,请查看链接: http://en.wikipedia.org/wiki/Internet_media_type

确保您的php启用了php_curl.dll扩展程序,并确保目标服务上的端口已打开。

希望这有帮助。

答案 8 :(得分:-1)

为curl尝试此选项

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

或使用此

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

答案 9 :(得分:-1)

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "your-domain-name");
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); `
?>