web-dev-qa-db-fra.com

PHP envoi de cURL sur le port 8080

aujourd'hui, j'essaie de faire un appel curl à un site écoutant le port 8080. Toutefois, des appels comme celui-ci sont envoyés au port 80 et non au 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);

est-ce que j'ai râté quelque chose?

14
VeeBee

Juste une remarque, j'ai déjà eu ce problème parce que l'hôte Web que j'utilisais bloquait les ports sortants en plus des ports standard 80 et 443 (HTTPS). Donc, vous voudrez peut-être leur demander ou faire des tests généraux. En fait, certains hôtes bloquent souvent même le trafic sortant sur le port 80 pour des raisons de sécurité.

2
SilentSteel
// 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');
1
vikashraj144

Votre serveur Web est mal configuré. Le code que vous avez fourni fonctionne pour moi.

En outre, votre code peut être plus simple. Il suffit de mettre l'URI dans l'appel init et de supprimer les lignes CURLOPT_PORT et CURLOPT_URL:

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

0
Daniel Convissor

Êtes-vous sûr que le serveur auquel vous souhaitez vous connecter n'est pas doté d'un pare-feu? Et que Selinux est désactivé?

0
Hadrien Huvelle

Commencez par vérifier que vous êtes en mesure de vous connecter en utilisant quelque chose d'autre que l'horrible syntaxe PHP de Curl:

sinon, utilisez (pour les utilisateurs de linux)

  • curl site: 8080
  • wget -qO- Somesite: 8080

Une fois que vous avez établi votre connexion, vous pouvez alors vous lancer dans l’horrible travail d’utiliser PHP Curl. Il y a des emballages, mais ce sont des feuillets que j'ai trouvés.

Curl, Wget ou similaire peuvent être très facilement configurés pour utiliser les méthodes GET et POST. Ce n'est pas conseillé, mais pour plus d'une opération compliquée avec Curl, j'ai tout simplement renoncé à essayer de configurer correctement la bibliothèque de PHP et je l'ai simplement passée en ligne de commande.

IL Y A DES INCIDENCES SUR LA SÉCURITÉ. Vous devez faire très attention à ce que tout ce que vous donnez, en particulier s'il provient d'un formulaire ou d'une source externe, soit correctement échappé.

<? 

//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
David

Avez-vous essayé de SSH sur le serveur qui l'exécute et vérifiez les règles iptables, et/ou essayez de vous connecter via telnet au serveur cible?

sh telnet somesite.tld 8080

Si rien d'autre, cela vous aidera à résoudre votre problème et à éliminer les problèmes de réseau.

0
Scott Arciszewski

Requête CURL GET simple: (Ajoute également json/en-têtes si nécessaire, pour vous faciliter la vie dans le besoin)

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

Exemple de requête 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 n'est pas un en-tête HTTP requis, pas plus que les autres. L'important est Content-Type .

Pour les exemples où j'ai utilisé le type JSON MIME, vous pouvez utiliser ce que vous voulez, regardez le lien: http://en.wikipedia.org/wiki/Internet_media_type

Assurez-vous que l'extension php_curl.dll est activée sur votre php et que les ports sont ouverts sur le serveur cible.

J'espère que cela t'aides.

0
Ohadsh

Maby vous pouvez utiliser --local-port [-num]

Définissez un nombre ou une plage de numéros de port locaux à utiliser pour la ou les connexions. Notez que les numéros de port sont par nature une ressource rare qui sera parfois occupée. Par conséquent, si vous définissez cette plage sur une valeur trop étroite, des échecs de configuration de connexion inutiles risquent de se produire. (Ajouté en 7.15.2)

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

0
Chilion