web-dev-qa-db-ja.com

PHP cURLをポート8080に送信

今日、私はポート8080をリッスンしているサイトにcurl呼び出しを行おうとしています。ただし、このような呼び出しは、8080ではなくポート80に送信されます。

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

私はここで何かが欠けていますか?

14
VeeBee

注意点として、私が使用していたWebホストが標準の80および443(HTTPS)以外のアウトバウンドポートをブロックしていたため、以前にこの問題が発生しました。だからあなたは彼らに尋ねるか、一般的なテストをしたいかもしれません。実際、一部のホストは、セキュリティのためにポート80でアウトバウンドをブロックすることさえあります。

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

Webサーバーが正しく構成されていません。あなたが提供したコードは私のために働きます。

また、コードを単純化することもできます。 URIをinit呼び出しに入れて、_CURLOPT_PORT_行と_CURLOPT_URL_行を削除するだけです。

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

0

参加しようとしているサーバーがファイアウォールで保護されていないことを確認しますか?そして、そのSelinuxは無効になっていますか?

0
Hadrien Huvelle

まず、PHPの恐ろしいCurl構文以外のものを使用して接続できることを確認します。

それ以外の場合は、使用を検討してください(Linuxユーザーの場合)

  • カールサムサイト: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
David

これを実行するサーバーにSSHで接続し、iptablesルールを確認したり、telnet経由でターゲットサーバーに接続したりしましたか?

sh telnet somesite.tld 8080

他に何もないとしても、問題のトラブルシューティングとネットワークの問題の解消に役立ちます。

0

単純なCURLGETリクエスト:(必要に応じて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です。 。

私がJSONMIMEタイプを使用した例については、好きなものを使用できます。リンクを見てください: http://en.wikipedia.org/wiki/Internet_media_type

php_curl.dll拡張機能がPHPで有効になっており、ターゲットサーブでポートが開いていることも確認できます。

お役に立てれば。

0
Ohadsh

Mabyを使用できます--local-port [-num]

接続に使用するローカルポート番号の優先番号または範囲を設定します。ポート番号は本質的に希少なリソースであり、時々ビジーになるため、この範囲を狭すぎる値に設定すると、不要な接続セットアップエラーが発生する可能性があることに注意してください。 (7.15.2で追加)

ソース: http://curl.haxx.se/docs/manpage.html#--ftp-pasv

0
Chilion