PHPのHttpRequestモジュールでのエラー解決方法とは?

このQ&Aのポイント
  • PHPのHttpRequestモジュールを使ってコードを書いたが、エラーが出てうまくいかない。特に「unexpected T_DOUBLE_ARROW」というエラーが出ている。$request->setHeadersの連想配列が原因かもしれないが、解決方法が分からない。
  • HTTP/Requestモジュールのマニュアルを見ても問題がないように思えるが、エラーが出る原因がわからない。誰か詳しい方、助けてください。
  • PHPのHttpRequestモジュールを使用してコードを書いたが、$request->setHeadersの連想配列で「unexpected T_DOUBLE_ARROW」というエラーが出てしまう。どうすれば解決できるのか、教えてください。
回答を見る
  • ベストアンサー

PHPのHttpRequestモジュールについて

HttpRequestモジュールを使って以下のようなコードを書いたのですが エラーの「unexpected T_DOUBLE_ARROW 」が出てうまくいきません。 どうやら$request->setHeadersのところの連想配列でエラーが出てるようなんですが どうやれば解決するのか分からず困っています。 ---------------------------------------------------------------------------- require_once 'HTTP/Request.php'; $request = new HTTP_Request(); $request->setURL("http://example.com"); $request->setMethod(HTTP_REQUEST_METHOD_POST); $request->setHeaders("Content-Type"=>"application/x-www-form-urlencoded"); $request->setHeaders("User-Agen"=>"Opera/9.80 (Windows NT 5.1; U; ja) "); print $request->getResponseBody(); ---------------------------------------------------------------------------- http://www.php.net/manual/ja/function.httprequest-setheaders.php のマニュアルを見ても問題が無いように思えます。 どなたかお詳しいかた教えてください

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

> http://www.php.net/manual/ja/function.httprequest-setheaders.php をみると、 publicbool HttpRequest::setHeaders ([ array $headers ] ) ――とあるから、array()で連想配列を渡すと、シンタックスエラーは解消できると思います。 ただ、PEARのHTTP_Requestを使われてますが、こいつにはそもそも、setHeaders()なんて実装されてないような。 PEARモジュールの使い方を確認してみるか、PECLを使うやり方で作り直してみては。

kyotokyo
質問者

お礼

お恥ずかしながらPECLモジュールの存在をはじめて知りました。 pear : phpで書かれた拡張モジュール pecl : cで書かれた組み込みモジュール ということだったんですね。 改めてpearのHttpRequestモジュールを確認したところ $request->setheader()ではなくて$request->addheader()となっており この点を修正したところ無事HTTPリクエストを送ることが出来ました。 丁寧なご回答ありがとうございます

その他の回答 (1)

  • tomaju
  • ベストアンサー率76% (84/110)
回答No.1

$request->setHeaders(array("Content-Type"=>"application/x-www-form-urlencoded")); とするとどうでしょうか。

kyotokyo
質問者

お礼

私もそう思ったのですがなかなかうまくいきませんでした。 私の早とちりでPearモジュールとpeclモジュールを勘違いしてました。 ご回答ありがとうございます。

関連するQ&A

  • phpのHttpRequestを使いたい。

    phpのHttpRequestでサーバにsetBodyしたいのですが、どのライブラリをどうインストールしたらいいでしょうか。 次のphpプログラムで、サーバにJSON形式のデータを送ろうと思っています。 $request = new HttpRequest("http://localhost/apiserver.php"); $request->setMethod(HTTP_METH_POST); $request->setBody(json_encode($info)); $request->send(); $response = $request->getResponseBody(); 上記のプログラムは、実績があり、間違っておりません。 しかし、”new HttpRequest”以降で処理が行われていません。 ”new HttpRequest”ができないと判断しています。 その”new HttpRequest”を実行するためのライブラリは一体なんでしょうか。 phpのバージョンは、5.4または5.5です。 ちなみに、次の2つのライブラリのそれぞれのphp_http.dllは試しましたが、うまくいきませんでした。 php_http-2.0.6-5.6-ts-vc11-x64 php_http-2.0.6-5.6-ts-vc11-x86 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ローカルでは動くがサーバーでは動かない・・・

    メールを配信するCGIがあります。 フォームで登録するようになっているのですが、フォームで登録した際に、御礼のメールを配信したいと思って下記のようなphpを作っています。 フォームから送信されたデータを受け取り、送信者にメールを送った後、別のCGI(perl)にPOST送信するphpを作っています。 ローカルに作ったphp環境では動いたのですが、サーバーにアップロードすると下記のエラーが出て動きませんでした。 エラーメッセージ Warning: main(HTTP/Request.php): failed to open stream: No such file or directory in /home/*****/public_html/cgi/********/mail.php on line 34 メールを送信する部分は特に問題なく動いているみたいで問題はほかのcgiにPOST送信する部分にあるみたいです。初心者なのであるHPに掲載されていたコードをまる写しして必要な部分だけ変更しただけで、あまり意味は分からないままです。 /*POST送信*/ require_once "HTTP/Request.php"; $req =& new HTTP_Request("http://www.***.jp/******/cgi/**********/cgi-bin/*****.cgi"); $req->setMethod(HTTP_REQUEST_METHOD_POST); $req->addPostData("mail", "$mail"); $req->addPostData("md", "*****"); $req->addPostData("id", "**************"); if (!PEAR::isError($req->sendRequest())) { $response1 = $req->getResponseBody(); } else { $response1 = ""; } エラーメッセージにある34行目というのは require_once "HTTP/Request.php"; なのですが、どこに問題があるのでしょうか?

    • 締切済み
    • PHP
  • PHPのHTTP/Requesをローカルでテストする方法は?

    PHP初心者なのですが、 初めてPHPのPEARパッケージにあるHTTP/Requestクラスを使って、別サーバーのAPIに対し、XMLのリクエストをし、XMLのレスポンスを受け取るやり取りをする関数を作りたいと思い、下記のような関数を作ってみたのですが、ローカル環境でどのようにテストすれば、HTTP/Requestの挙動をうまく確認できるかが思い浮かばずに、止まってしまいました。 どのようにテストすれば挙動がローカルで確認できるか、どなたか、ご教授お願いします!!! ----------- 制作した関数 引数1:リクエスト先URL、引数2: function testHttp($requestUrl,$requestXml){ $option = array( "timeout" => "3", // タイムアウトの秒数指定 "allowRedirects" => true // リダイレクトの許可 ); // HTTP_Requestの初期化 $http = new HTTP_Request($requestUrl, $option); // HTTPのヘッダー設定 $http->addHeader("User-Agent", "My PEAR PROGRAM"); $http->addHeader("Referer", $obj->protMember('LOGIN_URL')); $http->setMethod(HTTP_REQUEST_METHOD_POST); // HTTPリクエスト実行 $response = $http->sendRequest(); if (!PEAR::isError($response)) { $responseVal['resCode'] = $http->getResponseCode(); // ResponseCode $responseVal['resBody'] = $http->getResponseBody(); // ResponseBody return $responseVal; }else{ exit(); } }

    • 締切済み
    • PHP
  • Perlで言う、LWP HTTPをPHPで

    PerlでのスクリプトをPHPに移行しようかと考えております。(勉強のため) それで、PerlのモジュールでいうLWPとHTTPに代わるクラスライブラリ(API)は、どれにあたるのでしょうか? 具体的には、LWP::UserAgentとHTTP::Requestです。 ※詳しくは、 my $wa = new LWP::UserAgent; my $req = new HTTP::Request(GET => $url); my $res = $wa->request($req); PHPのドキュメント(http://www.php.net/manual/ja/)を見たのですが、いまいちピンときませんでした。 参考URLで結構ですので、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PEAR HTTP_Requestでのヘッダ送信

    PEARのHTTP_Requestを使用し、 下記処理にてTEST_URL向けにPOSTとヘッダを同時に送信する処理を行いたいのですが 411 Length Requiredで返ってきてしまします。 サーバのログには Invalid URI in request Connection: Keep-Alive というログがerrorログに出ています。 そこでRFCを読んで見ると、 転送コーディングが施されていない場合は Content-Length ヘッダは送られなければならないが、 メッセージボディ中のオクテット数と 正確に一致しなければならないとの記載がありました。 ここに引っかかっているのかもと思い対策しようと思いましたが メッセージボディのlength(下記の☆部分)をどのように拾うかがわかりません。 require_once "HTTP/Request.php"; $req = &new HTTP_Request(TEST_URL,array()); $req->setURL(TEST_URL); $req->setMethod(HTTP_REQUEST_METHOD_POST); $req->addHeader('Host',"test.hogehoge.jp\r\n"); $req->addHeader('Content-Length',"-☆-\r\n"); $req->addHeader('Connection', "Keep-Alive\r\n"); $req->addHeader('User-Agent',"TEST ABCDEFG\r\n"); $req->addPostData('TEST_POST', 'testnano'); $result = $req->sendRequest(); if(PEAR::isError($result)) { echo $result->getMessage(); echo "<br />"; } else { echo $req->getResponseCode(); echo "<br />"; echo $req->getResponseBody(); echo "<br />"; } もしかして違う原因でしょうか? よろしくおねがいします。

    • 締切済み
    • PHP
  • HTTP_Request2で検索結果を取得したい

    pearのHTTP_Request2を使ってサイト内の検索結果を取得したいのですが、 どうにもうまく取得できなくて困っております。 ■やりたいこと 対象サイトをクックパッドにしたいと思います。 http://cookpad.com/search 料理名、食材名のフリーワードのところに例えばキムチと 入力して、その検索結果を表示したい(http://cookpad.com/search/%E3%82%AD%E3%83%A0%E3%83%81)と思っているのですが、リクエストがうまくいかず、上記URLのページがそのまま返ってきてしまいます。ソースは以下です。 <?php require_once "HTTP/Request2.php"; require_once "Net/URL2.php"; $request = new HTTP_Request2('http://cookpad.com/search', HTTP_Request2::METHOD_GET, array('use_brackets' => true)); $url = $request->getUrl(); $url->setQueryVariables(array( 'keyword' => 'キムチ' )); $url->setQueryVariable('commit', 'レシピ検索'); echo $request->send()->getBody(); 一体、どこが間違っているのでしょうか? 下記URLを参照して試みたのですが、どうにもうまくいきません。 お手数ですが、ご教授いただけますと幸いです。 参照ページ http://pear.php.net/manual/ja/package.http.http-request2.request.php

    • ベストアンサー
    • PHP
  • php3からphpを呼び出し、POSTデータを渡す方法

    何時もお世話になります。 今回質問させて頂きたいことは php3のスクリプトからphpスクリプトを呼び出し、さらに phpスクリプトはPOSTデータを渡す方法は無いか教えて頂きたいです。 環境は FreeBSD4 apache_1.3.33 php-3.0.18-i18n-ja-3 php-4.3.7 です。 仮に呼び出し元のphp3のファイルをexample.php3 呼び出し先のphpのファイルをhoge.php として解説します。 example.php3から include、require等の関数で hoge.phpを呼び出した場合、hoge.phpは php3として実行される様なのでこの方法は×。 example.php3でvirtual()関数を使い、hoge.phpを呼び出せば 解決かと思ったのですがPOSTデータをhoge.phpに 渡す方法が無いためこの方法も×。 php3ではSESSIONが使えないため、SESSION + virtual()関数という 方法も×。 ということでちょっと手詰まりの状態です。どなたか解決方法をご存知の 方ご教示頂ければと思います。

    • ベストアンサー
    • PHP
  • unexpected T_REQUIRE とは?

    <? php require('Smarty.class.php'); require('Logging.class.php'); …・ と書いてあるlogging_gui.phpファイルをブラウザで開こうとすると、 Parse error: syntax error, unexpected T_REQUIRE in C:\Program Files\Apache Group\Apache2\**********\logging_gui.php on line 3 というエラーが出ます。 PHPマニュアルでT_REQUIREを調べてみましたが、意味が分かりません。 テンプレートはtemplates_cにコンパイルされています。 何が不具合であると言っているのでしょうか? Logging.class.phpの中身に間違いがあるということでしょうか? エラーをなくすには何をチェックすればよいのでしょうか? 超初歩的、かつ漠然とした質問かも知れませんが、よろしくお願いします。

    • 締切済み
    • PHP
  • mod_rewrite的なことをphpで実現させたいが空白ページが表示されてしまう

    www.example.com/ほげほげ にアクセスされたら、 example.com/ほげほげ へ urlをかきかえ、 さらに、 $_SERVER["REQUEST_URI"] がスラッシュで終わる(2個以上のスラッシュも考慮)ときは、これらのスラッシュをとりのぞいたurlへかきかえ、 そして、このurlへ301ステータスコードでリダイレクトさせる(ただし、get methodの場合に限る) というコードをphpで書いたのですが、 なぜか、urlは書き換わらず、空白のページが表示されてしまいます。 どこがいけないのでしょうか? お助けくださいませ。         if ($_SERVER["REQUEST_METHOD"] == "GET"){             #HTTP_HOST (exclude www.)             preg_match_all("/^(www\.)(.*)$/", $_SERVER["HTTP_HOST"],$matches_HTTP_HOST);             if ($matches_HTTP_HOST[1] != ''){                 $bWillBeRedirected = true;                 $strAfterRedirect_HTTP_HOST = $matches_HTTP_HOST[2];             }             else{                 $strAfterRedirect_HTTP_HOST = $_SERVER["HTTP_HOST"]             }             #REQUEST_URI (,which includes query string)             preg_match_all("/^(\/)(.*)(\/+)$/", $_SERVER["REQUEST_URI"],$matches_REQUEST_URI);             if ($matches_REQUEST_URI[3] != ''){                 $bWillBeRedirected = true;                 $strAfterRedirect_Request_URI = $matches_REQUEST_URI[1] . $matches_REQUEST_URI[2];             }             else{                 $strAfterRedirect_Request_URI = $_SERVER["REQUEST_URI"];             }             #redirect with 301 status code if needed             if($bWillBeRedirected){                 #Protocol                 if ($_SERVER["HTTPS"] == "on"){                     $strProtocol = "https";                 }                 else{                     $strProtocol = "http";                 }                 $url = $strProtocol . "://" . $strAfterRedirect_HTTP_HOST . $strAfterRedirect_Request_URI;                                                   header("HTTP/1.1 301 Moved Permanently");                 hearder(”Location: “.$url);                 header(”Connection: close”);             }         }

    • ベストアンサー
    • PHP
  • PEARのパッケージのパスの変更方法

    さくらレンタルサーバで、以下の手順でPEARをインストールしました。 http://www.seo-maniax.com/high-rank/sakura-pear/ 次に以下のコマンドを実行しました。 pear channel-update pear.php.net pear install Net_URL2-2.0.0 pear install HTTP_Request2-0.5.1 pear install HTTP_OAuth-0.2.3 そして、/home/ユーザ名/pear/HTTP/Consumer.phpを使ったプログラムで、以下のエラーが。 Warning: require_once(HTTP/OAuth.php) [function.require-once]: failed to open stream: No such file or directory in /home/ユーザ名/pear/HTTP/OAuth/Consumer.php on line 24 Fatal error: require_once() [function.require]: Failed opening required 'HTTP/OAuth.php' (include_path='.:/home/ユーザ名/pear/PEAR') in /home/ユーザ名/pear/HTTP/OAuth/Consumer.php on line 24 line 24は、require_once 'HTTP/OAuth.php'; となっており、正しいパスは'../OAuth.php'なので、正しくインストールしたいのですが、どうすれば良いのでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう