Подтвердить что ты не робот

Передача PHP cURL на порт 8080

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

Мне что-то не хватает?

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

sh telnet somesite.tld 8080

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

Ответ 4

Сначала проверьте, что вы можете подключиться с использованием чего-то другого, кроме синтаксиса Curl, отличного от PHP:

еще посмотрите на использование (для пользователей 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");

Ответ 5

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

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

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

Ответ 6

Вы уверены, что сервер, на котором вы собираетесь присоединиться, не является файерволом? И что Selinux отключен?

Ответ 7

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

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

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

Ответ 8

Простой запрос 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 request:

<?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_curl.dll включено на вашем php, а также что порты открыты на целевой странице.

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

Ответ 9

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

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

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

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

Ответ 10

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