PHP cURL发送到端口8080

5rgfhyps  于 2023-11-16  发布在  PHP
关注(0)|答案(8)|浏览(165)

今天,我试图对正在监听端口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);

字符串
我错过了什么吗?

p1tboqfb

p1tboqfb1#

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

oxosxuxt

oxosxuxt2#

简单的URL 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扩展,并且在目标服务器上打开了端口。
希望这对你有帮助。

mftmpeh8

mftmpeh83#

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

else看看using(对于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");

字符串

fnatzsnv

fnatzsnv4#

您的Web服务器配置错误。您提供的代码适用于我。
另外,你的代码可以更简单。只需将URI放入init调用中,并删除CURLOPT_PORTCURLOPT_URL行:
$ch = curl_init('http://somesite.tld:8080');

ulmd4ohb

ulmd4ohb5#

也许你可以使用--local-port [-num]
设置用于连接的首选本地端口号或端口号范围。请注意,端口号本质上是一种稀缺资源,有时会忙碌,因此将此范围设置得过窄可能会导致不必要的连接设置失败。(在7.15.2中添加)
来源:http://curl.haxx.se/docs/manpage.html#--ftp-pasv

k7fdbhmy

k7fdbhmy6#

使用PHP cURL向服务器上的端口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');

字符串

egmofgnx

egmofgnx7#

尝试此选项的 curl

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

字符串
或使用本

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

qrjkbowd

qrjkbowd8#

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

字符串

相关问题