2009年8月11日火曜日

 

【PHP】cURLでCookieとかSSLサイトにログインや投稿

結論から言うと、自分がやりたいことは出来ませんでしたよー。
SSL領域のユーザ画面にログインして編集するのが目的だったが、取得できたページ内容はサイトの表示するエラーページだった。 USER_AGENT設定してみたりしたが、携帯アクセス禁止のサイトだからユーザのIPアドレスで振り分けてるのだろうか。
手詰まり。

以下の設定をつけるとSSLサイトでもいけるようだ。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // サーバ証明書検証をスキップ
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // サーバ証明書検証をスキップ

OpenSSLが有効になってる必要があるらしいのでphpinfo()でパスが通ってるか確認。(XREAレンタルサーバは使える)

Cookieを使ってログイン認証をしている場合は以下のような感じで出来たはず。

/* Cookie を使ったログイン認証 - ログイン*/
  $params = array('user' => 'UserName', 'password' => 'pass0123');

  $fp = fopen("tmp", "w");
  $ch = curl_init("https://example.com");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie");
  curl_setopt($ch, CURLOPT_POST, TRUE);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
  curl_setopt($ch, CURLOPT_WRITEHEADER, $fp);  
  $output = curl_exec($ch);
  fclose($fp);
  print_r(curl_getinfo($ch));
  curl_close($ch);

  print "CURL OUTPUT:\n{$output}\n";

ログイン後のページにPOST。

/* Cookie を使ったログイン認証 - 投稿 */
  $params = array('title' => 'Test', 'text' => 'Hello!');

  $ch = curl_init("https://example.com");
  curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
  curl_setopt($ch, CURLOPT_HEADER, TRUE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_COOKIEFILE, "tmp");
  curl_setopt($ch, CURLOPT_POST, TRUE);
  $output = curl_exec($ch);
  print_r(curl_getinfo($ch));
  curl_close($ch);
  print "CURL OUTPUT:\n{$output}\n"; 

「tmp」ファイルにCookieの内容が書き込まれる。セーフモードの場合は事前に作成して権限変更する。

/* その他cURLのオプション */
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // サーバが HTTP ヘッダの一部として送ってくる "Location: " ヘッダの内容をたどる
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // HTTP リクエストで使用される "User-Agent: "  ヘッダの内容。
  curl_setopt($ch, CURLOPT_REFERER, 'http://example.com/'); // HTTP リクエストで使用される "Referer: "  ヘッダの内容

参考

curlによるSSL sample - rings100's プログラミング
PHPセキュリティ対策:SSL通信を行う - ぱふぅ家のホームページ

関連

Wassr APIをPHPから - さぼてん:2009年3月27日
クローラのためのライブラリ - さぼてん:2008年8月20日

ラベル:


コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google