PHP cURL отправка на порт 8080 - PullRequest
14 голосов
/ 09 июня 2011

сегодня я пытаюсь сделать curl-вызов на некоторый сайт, который прослушивает порт 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 ]

2 голосов
/ 01 апреля 2012

Просто обратите внимание, у меня была эта проблема раньше, потому что веб-хост, который я использовал, блокировал исходящие порты помимо стандартных 80 и 443 (HTTPS).Так что вы можете спросить их или сделать общие тесты.Фактически, некоторые хосты часто даже блокируют исходящий порт 80 для безопасности.

1 голос
/ 25 августа 2014
// 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 голосов
/ 08 сентября 2014

Простой запрос 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, а также что порты на целевой службе открыты.

Надеюсь, это поможет.

0 голосов
/ 28 августа 2014

Мабы вы можете использовать --local-port [-num]

Установите предпочтительный номер или диапазон номеров локальных портов, которые будут использоваться для подключения. Обратите внимание, что номера портов по своей природе являются дефицитным ресурсом, который иногда будет занят, поэтому установка этого диапазона на слишком узкое значение может привести к ненужным сбоям настройки соединения. (Добавлено в 7.15.2)

Источник: http://curl.haxx.se/docs/manpage.html#--ftp-pasv

0 голосов
/ 28 августа 2014

Вы уверены, что сервер, к которому вы собираетесь присоединиться, не защищен брандмауэром?А что Селинукс отключен?

0 голосов
/ 09 апреля 2014
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "your-domain-name");
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); `
?>
0 голосов
/ 01 апреля 2014

Ваш веб-сервер настроен неправильно.Код, который вы предоставили, работает для меня.

Кроме того, ваш код может быть проще.Просто вставьте URI в вызов init и удалите строки CURLOPT_PORT и CURLOPT_URL:

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

0 голосов
/ 01 апреля 2014

попробуйте эту опцию для curl

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

или используйте эту

curl_setopt($ch, CURLOPT_PROXY,"yourservername:8080");
0 голосов
/ 04 марта 2014

Сначала проверьте, что вы можете подключиться, используя что-то кроме ужасного синтаксиса 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");
0 голосов
/ 21 февраля 2014

Вы пытались подключиться по SSH к серверу, на котором это выполняется, и проверить правила iptables и / или пытаться подключиться через telnet к целевому серверу?

sh telnet somesite.tld 8080

Если ничегоиначе это поможет устранить проблему и устранить проблемы с сетью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...