fsockopenでプロキシー経由のhttpsアクセス - PHPプロ!Q&A掲示板

300

  • 200P

fsockopenでプロキシー経由のhttpsアクセス

質問日時 / 2006年12月27日 20:37 (最終編集:12月28日 10:12)    回答数 / 2件

Questioner:  insystem2006  このエントリーをはてなブックマークに追加 

キーワード / https    proxy    fsockopen   

cURLを使わずにPHP4.4.4で以下の事をしようと思っています。
fsockopenで、プロキシーサーバーに接続し、https://からはじまるサイトへ接続しようと思っていますが、
HTTPステータス400番が返ってきて接続できません。
なにか方法はありませんでしょうか?
尚、PHPインストール時にopenSSLを使えるようにはなっています。

.php → proxy:8080 → https://login.yahoo.co.jp:443/


(下記のコードのURIは、サンプルです)
  1. <?php
  2. error_reporting(E_ALL);
  3.  
  4. $TARGET_URI = 'https://user:pass@login.yahoo.co.jp:443/';
  5. $target_uri = parse_url($TARGET_URI);
  6.  
  7. $proxy_host = 'proxy';
  8. $proxy_port = 8080;
  9.  
  10. // リクエスト
  11. $req = 'GET '.$target_uri['path']." HTTP/1.1\x0d\x0a";
  12. $req .= 'Host: '.$target_uri['host'].':'.$target_uri['port']."\x0d\x0a";
  13. $req .= 'Authorization: Basic '.base64_encode($target_uri['user'].':'.$target_uri['pass'])."\x0d\x0a";
  14. $req .= "\x0d\x0a";
  15.  
  16. $fp = fsockopen($proxy_host$proxy_port$errno$errstr$timeOut);
  17.  
  18. if(!$fp){
  19.   print 'ソケット初期化エラー';
  20. }else{
  21.   // データ送信
  22.   fwrite($fp$req);
  23.  
  24.   // レスポンスデーター受信
  25.   $res = '';
  26.   while(!feof($fp))  $res .= fgets($fp);
  27.  
  28.   print '<pre>';
  29.   print $res;
  30.   print '</pre>';
  31. }
  32. ?>


ツリー一覧

┗A01lowol>>CODE $req = 'GET https://'.$target_uri['host']
 ┗A01-1insystem2006書き込み有難うございます。 ご指摘の方法でも実は試

回答一覧

並び替え:

A01
answererlowol [12月27日 22:18]

  1. $req  = 'GET https://'.$target_uri['host'].':'.$target_uri['port'].$target_uri['path']." HTTP/1.1\x0d\x0a";

これで、どうですか?

この意見に回答する

ツリーへ TOPへ

A01-1
replyerinsystem2006 [12月28日 10:10]

書き込み有難うございます。
ご指摘の方法でも実は試しており、HTTP/1.0 400 Bad Request が返ってきて、以下の内容が返されます。
  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  2. <HTML><HEAD>
  3. <TITLE>400 Bad Request</TITLE>
  4. </HEAD><BODY>
  5. <H1>Bad Request</H1>
  6. Your browser sent a request that this server could not understand.<P>
  7. Reason: You're speaking plain HTTP to an SSL-enabled server port.<BR>
  8. Instead use the HTTPS scheme to access this URL, please.<BR>
  9. <BLOCKQUOTE>Hint: <A HREF="https://www.test.com:443/"><B>https://www.test.com:443/</B></A></BLOCKQUOTE><P>
  10. </BODY></HTML>

おおまかな意味は、ブラウザがSSLに対応していないというメッセージだとは思いますが、ブラウザが通信
しているわけではないので直接は関係ないと思うのですが。
openSSLは、Proxy を使用した https は行えないというのを見たのですが、その実証というか裏がとれなかったので調べています。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)