2011-06-09 31 views
13

发送到端口我试图使卷曲呼叫somesite被监听端口8080。然而,呼吁像这样被发送到端口80,而不是8080而是:PHP卷曲今天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); 

上午我在这里错过了什么?

+0

您可以尝试http://somesite.tld:8080作为url。 – TJHeuvel 2011-06-09 08:12:28

+0

你正在使用哪个托管? – Kamil 2011-06-09 08:13:16

+0

orbit.theplanet.com – VeeBee 2011-06-09 08:14:39

回答

2

只是一个说明,我之前有过这个问题,因为我使用的Web主机阻止了标准80和443(HTTPS)以外的出站端口。所以你可能想要问他们或做一般性测试。事实上,为了安全起见,一些主机通常甚至阻塞80端口的出站。

+1

HTTPS是端口443 – DanFromGermany 2014-01-17 09:15:51

+0

990标准到底如何? – 2014-03-04 13:08:27

+0

端口990是FTPS。 – Powerlord 2014-04-01 16:13:02

0

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

sh telnet somesite.tld 8080

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

0

首先检查你能够使用比PHP的可怕卷曲语法以外的东西来连接:

别人看看使用(用于Linux用户)

  • 卷曲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"); 
-1

试试这个选项卷曲

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

或使用该

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

您的Web服务器配置不正确。您提供的代码适用于我。

此外,您的代码可以更简单。只要把URI进入初始化呼叫,丢弃CURLOPT_PORTCURLOPT_URL线:

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

+0

是的,这有效,但它不一定是“更简单”。它为您节省了一条线路,但代价是可读性和可扩展性。 – Nilpo 2014-05-05 15:47:36

-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); ` 
?> 
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'); 
0

你确定你的意图加入服务器没有防火墙?那Selinux被禁用?

0

莫比可以使用 --local端口[-num]

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

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

0

简单的卷曲GET要求:(还增加了JSON /头如果需要的话,让您的生活需要更容易)

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

字符集不是必需的HTTP标头其他人也是如此,重要的是Content-Type

有关的例子,我用JSON的MIME类型,你可以使用任何你想要的,看看链接: http://en.wikipedia.org/wiki/Internet_media_type

确保php_curl.dll扩展你的PHP启用,也是港口在目标服务器上打开。

希望这会有所帮助。