• 締切済み

HTTPでPOSTしてgooメールにログイン

Javaを使用して、HTTPでgooメールにログインしたいのですが、うまくいきません。 サンプルを探して試しているのですが、レスポンスに「302」が返却されます。 HTTPヘッダの情報が足りないのか、POSTするデータが足りないのか、 はたまた、その他なにかしらが足りないのか、ご存知の方がおりましたら、教えて頂けないでしょうか? 以下apacheのhttpclientを使ったレスポンスに「302」が返却されるプログラムです。 public class http_test { public static void main(String[] args) { try { String url = "https://login.mail.goo.ne.jp/id/authn/Login"; String id = "gooID"; // gooID ※質問用にダミー値を設定 String pass = "password"; // パスワード ※質問用にダミー値を設定 String params = "uname="+ id +"&pass=" + pass + "&Site=mail.goo.ne.jp&Success=http://mail.goo.ne.jp"; HttpPost httpPost = new HttpPost( url ); DefaultHttpClient httpClient = new DefaultHttpClient(); StringEntity paramEntity = new StringEntity( params ); paramEntity.setChunked( false ); paramEntity.setContentType( "application/x-www-form-urlencoded" ); httpPost.setEntity( paramEntity ); HttpResponse response = httpClient.execute( httpPost ); int status = response.getStatusLine().getStatusCode(); if ( status != HttpStatus.SC_OK ) { // ここで「302」が返却される System.out.println(status); throw new Exception( "" ); } }catch(Exception e) { e.printStackTrace(); } } }

  • Java
  • 回答数2
  • ありがとう数3

みんなの回答

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

まさか、そんな面倒なこと言わない。 暗号前: ウェブブラウザでみる 複合後: ウェブサーバでみる コードのホスト部分だけ変えて、自分で立てたウェブサーバに送信!

jiyatoyu
質問者

お礼

なるほど、サーバーたててですね。 (って、立て方わかんないけど…アパッチ入れればいいのかな?) もう少し待って、有用な回答がなければ、やってみます。 ありがとうございました。

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.1

自動ログインのコードは悪用されるかもしれないから、答えられないけど、 ウェブブラウザと Java プログラムとの間で、下の 2つを比べて見ればわかると思うよ? Request Header Request Body

jiyatoyu
質問者

お礼

早速の回答、ありがとうございます。 パケットを比較する事は最初に思いつきましたが、キャプチャしてみるとあまりにも大量に出てきて...ちょっと、見る気が失せたというか...(HTTPはほとんど知識がないので...) あと、少しググッたら、HTTPSでのパケットはヘッダも含め暗号化されるとの事だったのですが。

関連するQ&A

  • NumberFormatエラーでこまっています

    Android Eclipse でかんたんなアプリを作っています PHPが表示した値を持ってきて INT型に変換したいのですがNumberFormatエラーがでてしまいます。 String ret = ""; // URL URI url = null; try { url = new URI( "http://10.0.2.2/CarStudy/passview.php" ); Log.d("posttest", "URLはOK"); } catch (URISyntaxException e) { e.printStackTrace(); ret = e.toString(); } // POSTパラメータ付きでPOSTリクエストを構築 HttpPost request = new HttpPost( url ); List<NameValuePair> post_params = new ArrayList<NameValuePair>(); ここで前のページからもってきたID変数をPOSTしておくってやります。 post_params.add(new BasicNameValuePair("userid", ID)); try { // 送信パラメータのエンコードを指定 request.setEntity(new UrlEncodedFormEntity(post_params, "UTF-8")); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } // POSTリクエストを実行 DefaultHttpClient httpClient = new DefaultHttpClient(); try { Log.d("posttest", "POST開始"); ret = httpClient.execute(request, new ResponseHandler<String>() { このあとretに格納してあるのもInteger型にしたいのですが、 どうしてもNumberFormatエラーがでてしまします。 String型ですのでLog.dで確認するとしっかりとパスワードが取り出せています ですので int retint = integer.parseInt(ret,0); をするのですが、エラーがでます。 trim() なども試しましたがどうもなりません。 調べたところ ParseIntは中に整数のみができる?みたいなことが書いてあるのですが 実際中に入っているのはString型のただの数字です。 型変換のやり方がEclipse上でできないのならば 受け取る際に Ret に既にInt型の状態で受け取りたいのですがそちらもうまくいきません。 文章がおかしいかもしれませんが助けてくださる方お願い致します。。 いちおうPHPの方ものせておきます $ID = $_POST["userid"]; $recordSet = mysql_query('SELECT * FROM studentt WHERE studentID=' . $ID); $data = mysql_fetch_assoc($recordSet); echo $data['pass']; Echoしたやつを持ってきてRetに入れるのですが・・・ StringかどうかEclipse上で Retに対してCtrl+スペースで型を確認してもStringとなっており Logで確認しても ちゃんと「0001」とはいっています。 つまりこの0001の他になにか文字が入っているということなのでしょうか? PerseIntはString内の数字を変換できると書いてありますが 文字が入っている場合はエラーがでると書いてあります。 ですが0001とかしはいっていないので 困っています

    • ベストアンサー
    • Java
  • AndroidアプリのXML送受信

    Androidのアプリとサーバー間でXMLを送受信するという処理を考えています。 http://blog.5ive.info/archives/1040 のsampleを参考にしたのですが、判らない事があります。 ------------------------------------------------------------------------------------------- 【以下、sampleを抜粋】 //[クライアント設定] HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); //[POST送信するデータを格納] List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(1); nameValuePair.add(new BasicNameValuePair("name", "simo")); nameValuePair.add(new BasicNameValuePair("text", "hello!")); //-----[POST送信] httppost.setEntity(new UrlEncodedFormEntity(nameValuePair)); HttpResponse response = httpclient.execute(httppost); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); response.getEntity().writeTo(byteArrayOutputStream); ------------------------------------------------------------------------------------------- 送信する際にList<NameValuePair>というListに格納していますが、NameとValueと2つのパラメータが必要で、XMLのデータのみの送信にNameは必要ありません。 単純にXMLのデータだけを送信したいのですが、httppostでデータを送信するにはList<NameValuePair>を使用するしかないのでしょうか? もし駄目なら、AndroidでXMLを送受信するにはどうしたら良いのでしょうか?

  • Androidアプリ作成でこまっています

    Android Eclipse でかんたんなアプリを作っています。エミュレーターではできるのですが、実機では動かないです。Xamppを使っています 実機というのはUSBでつないでいるのではなく直接インストールしています エミュレーターからLocalhostにつなぐ時、 10.0.2.2でつなぐことはみなさんご存知だと思いますが じぶんは自分のAndroid端末にいれて同一ネットワークのWifi経由で繋ぎたいので PCのIPアドレスを打ち込んでいます。 ですが、どうやらつながらない模様です。端末のブラウザからはIPアドレスを打ち込むとXamppの設定画面?がでていますのでIPアドレスの間違いまたは接続ができないということはないとおもいます。 ですがいざ自分の作ったアプリをインストールし、通信を行うページまでいくと「問題が発生したため~終了します」とでます。 わたしは権限の問題かと思いManifestにACCESS_COARSE_LOCATION ACCESS_WIFI_STATE CHANGE_WIFI_STATE ACCESS_NETWORK_STATE INTERNET を追加しましたが、いまだにできません ちなみに使っているPOST通信をするのは String ret = ""; // URL URI url = null; Log.d("posttest", "11"); try { url = new URI( "http://192.168.24.54:80/CarStudy/passview.php" ); Log.d("posttest", "URLはOK"); } catch (URISyntaxException e) { e.printStackTrace(); ret = e.toString(); } // POSTパラメータ付きでPOSTリクエストを構築 HttpPost request = new HttpPost( url ); List<NameValuePair> post_params = new ArrayList<NameValuePair>(); post_params.add(new BasicNameValuePair("userid", ID)); try { // 送信パラメータのエンコードを指定 request.setEntity(new UrlEncodedFormEntity(post_params, "UTF-8")); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } // POSTリクエストを実行 DefaultHttpClient httpClient = new DefaultHttpClient(); try { Log.d("posttest", "POST開始"); ret = httpClient.execute(request, new ResponseHandler<String>() これでretないにPHPで吐き出したのを格納するのですがどうやらここでエラーが出るみたいです。エミュレーターのほうではエラーが出ません。 日本語がおかしくわかりづらいかもしれませんがお力をおかしください・・・

  • HttpPostでクエリが送信できない

    とりあえずAndroidのソースなのでAndroidのカテゴリにします 次のようなスクリプトをeclipseで組んでみたのですが、実際に実行するとparamsで指定したクエリが全く送信できていません。javaです。 connectUrlはhttp://shindanmaker.com/(診断ページ番号)で、 paramsには "u" : (診断内容) "from" : ""(空の文字列) が入っています。 文字化けは大丈夫です。 アドバイスお願いします。 public String httpPostRequest( String connectUrl, List<NameValuePair> params, String encode ){ //-----[クライアント設定] try { HttpClient httpclient = new DefaultHttpClient(); // MultipartEntity entity = new MultipartEntity(); //テキストの送信 // for( NameValuePair pair : params ){ // entity.addPart( pair.getName(), new StringBody(pair.getValue(),Charset.forName(HTTP.UTF_8))); // } // entity.addPart(filePair.getName(), new FileBody(file,"application/octet-stream")); HttpPost httppost = new HttpPost(connectUrl); httppost.setURI(new URI(connectUrl)); httppost.setHeader("User-Agent", "Android"); httppost.setHeader("Content-type","text/html"); httppost.setHeader("Content-Type", "multipart/form-data"); httppost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE,false); //-----[POST送信] httppost.setEntity(new UrlEncodedFormEntity(params, encode)); HttpResponse response = httpclient.execute(httppost); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); response.getEntity().writeTo(byteArrayOutputStream); //-----[サーバーからの応答を取得] if(response.getStatusLine().getStatusCode() != HttpStatus.SC_OK){ Toast.makeText(this, "[error]: "+response.getStatusLine(), Toast.LENGTH_LONG).show(); return null; } // return EntityUtils.toString( response.getEntity());//.getBytes( encode ).toString(); return byteArrayOutputStream.toString(); } catch (Exception e){ e.printStackTrace(); return null; } }

  • メール受信エラー【Net/POP3.php】

    自作blogを作っています。 試行錯誤しているのですが、解決できないので質問します。 モブログを付加させようとまずはメール受信プログラムを 作りましたが、動きません。login errorがでます。 この前にimapも作って走らせたのですが、動きませんでした。 http://nescio.seesaa.net/article/67124976.html を見て、引数も設定し直しましたが、ダメでした。 Net/pop3でなくてもよいのですが、解決法が あったら教えてください。ロリポップを使っています。 <?php require 'Net/POP3.php'; require_once("Mail/mimeDecode.php"); $mail_conf = array( 'host' => 'mail??.lolipop.jp', 'port' => '110', 'user' => 'lolipop.jp-bbbb', 'pass' => 'aaaaa', 'auth' => 'true', ); $pop3 =& new Net_POP3; $con = $pop3->connect( $mail_conf['host'], $mail_conf['port'], $mail_conf['auth']); if(PEAR::isError($con)){ die("接続エラー"); } $login = $pop3->login( $mail_conf['user'], $mail_conf['pass'],$mail_conf['auth']); if(PEAR::isError($login)){ die("login error"); } $maillist = $pop3->getListing(); if ( is_array( $maillist) && 0 < count( $maillist)) { foreach ( $maillist as $mailinfo) { $m_id = $mailinfo[ 'msg_id']; $mail = $pop3->getMsg($m_id); $params['include_bodies'] = true; $params['decode_bodies'] = false; $params['decode_headers'] = true; $params['input'] = $mail; $structure = Mail_mimeDecode::decode( $params); print_r($structure); } } $pop3->disconnect(); ?>

    • ベストアンサー
    • PHP
  • HttpClientについて

    MixiにログインするサンプルプログラムがあったのでEclipse上動かそうと思い HttpClientのライブラリをダウンロードし実行しようとしたところ PostMethod、GetMethodについて型に解決できませんと出ました。 ダウンロードしたファイルの中にあった全てのjar(以下の6個)にパスを通したのですが まだ何かライブラリが足りないのでしょうか。 ・commons-codec-1.4.jar ・commons-logging-1.1.1.jar ・httpclient-4.1.2.jar ・httpclient-cache-4.1.2.jar ・httpcore-4.1.2.jar ・hhtpmime-4.1.2.jar import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.apache.http.HttpException; import org.apache.http.client.HttpClient; import org.apache.http.client.params.CookiePolicy; import org.apache.http.impl.client.DefaultHttpClient; public class MixiLogin2 { public static void main(String[] args) { HttpClient client = new DefaultHttpClient(); String mixiLogin = "http://mixi.jp/login.pl"; String mixiTopPage = "http://mixi.jp/home.pl"; String encode = "EUC-JP"; String inputUserName = "email"; String inputPassword = "password"; String inputNextUrl = "next_url"; String userName = "xxxxx@xxxxx.com"; String password = "xxxx123456789"; String nextUrl = "/home.pl"; PostMethod postMethod = new PostMethod(mixiLogin); postMethod.addParameter(inputUserName, userName); postMethod.addParameter(inputPassword, password); postMethod.addParameter(inputNextUrl, nextUrl); postMethod.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); try { int statusCode = client.executeMethod(postMethod); System.out.println(statusCode); postMethod.releaseConnection(); if (statusCode == 200) { GetMethod getMethod = new GetMethod(mixiTopPage); statusCode = client.executeMethod(getMethod); if (statusCode == 200) { BufferedReader br = new BufferedReader( new InputStreamReader(getMethod .getResponseBodyAsStream(), encode)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } getMethod.releaseConnection(); } } catch (HttpException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • ログインページ

    PHPとMySQLで ログインするときに、ログインIDとパスワード(md5処理)を 入力する普通のログインページをつくったのですが 照合するときに例えば ログインIDがphp パスワードが178だとログインできず ログインIDがabe パスワードがabeだとログインできる ログインIDがパスワード一致の場合だけ何故かログインできて しまうのですが、自分で書いていてなんなんですが 以下のプログラムではそういう風になってしまうんでしょうか。 <?php if($_POST["keep_login"] != ""){ session_set_cookie_params(365*25*3600); }else{ session_set_cookie_params(0); } session_start(); require("config.php"); if($_POST["passwd"]==""){ $_POST["passwd"]=time(); } if($_POST["action"]=="login"){ $login_id = mysql_real_escape_string($_POST["login_id"]); $sql="select * from users where login_id= '$login_id' and state='0'"; $result=mysql_query($sql); $users=mysql_fetch_array($result); if($users["passwd"]==md5($_POST["passwd"])){ $_SESSION["login_id"]=$_POST["login_id"]; $_SESSION["auth_code"]=md5($magic_code.$_POST["login_id"]); $_SESSION["name_kanji"]=$users["name_kanji"]; $sql="update users set login_date = '".date('Y-m-d H:i:s')."' where login_id= '".mysql_real_escape_string($_POST['login_id'])."' and state='0'"; $result=mysql_query($sql); if($_GET["redirect"] !=""){ header("Location:".$_GET["redirect"]); exit; }else{ header("Location:".$site_url); exit; } }else{ $message='<br><br><font color="red">ログインできませんでした</font><br>'; } } ?>

    • 締切済み
    • PHP
  • 入力フォーム(JSP)にDB検索条件を入力し、データがなかった場合入力した値を残したままJSPに戻る方法を教えてください。

    基本的にはタイトルの質問なんですが、具体的な書き方がわかりません。 今作成しているのが TOP画面(JSP) ・入力フォームに検索条件 ↓ Servlet ・入力された条件でDB検索  何か検索されれば次画面へ遷移  何も検索されなければTOP画面へ戻る というものですが、 public class LoginCheck1 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); String user = request.getParameter("user"); String pass = request.getParameter("pass"); HttpSession session = request.getSession(true); boolean check = authUser(user, pass); if (check){ /* 認証済みにセット */ session.setAttribute("login", "OK"); /* 本来のアクセス先へ飛ばす */ String target = (String)session.getAttribute("target"); response.sendRedirect(target); }else{ /* 認証に失敗したら、ログイン画面に戻す */ session.setAttribute("status", "Not Auth"); response.sendRedirect("/auth/Login"); } } protected boolean authUser(String user, String pass){ /* 取りあえずユーザー名とパスワードが入力されていれば認証する */ if (user == null || user.length() == 0 || pass == null || pass.length() == 0){ return false; } return true; } } サーブレットはこんな感じで書いてるんですが、 response.sendRedirect("/auth/Login"); の部分が悪いんでしょうか?

    • ベストアンサー
    • Java
  • 会員制ログインページ

    会員制ログインページを製作しているのですが なかなかうまくいきません <?php if($_POST["keep_login"] != ""){ session_set_cookie_params(365*25*3600); }else{ session_set_cookie_params(0); } session_start(); //データベースに接続するphpです require("config.php"); if($_POST["passwd"]==""){ $_POST["passwd"]=time(); } //照合しているのですが、いろいろ試した結果ここが おかしいようなのですが if($_POST["action"]=="login"){ $sql = "select * from users where login_id = '".mysql_real_escape_string($_POST["login_id"])."' and state = '0'"; $result=mysql_query($sql); $users=mysql_fetch_array($result); if($users["passwd"]==md5($_POST["passwd"])){ $_SESSION["login_id"]=$_POST["login_id"]; $_SESSION["auth_code"]=md5($magic_code.$_POST["login_id"]); $_SESSION["name_kanji"]=$users["name_kanji"]; $sql="update users set login_date ='".date('Y-m-d H:i:s')."' where login_id='".mysql_real_escape_string($_POST['login_id'])."' and state='0'"; $result=mysql_query($sql); if($_GET["redirect"] !=""){ header("Location:".$_GET["redirect"]); exit; }else{ header("Location:".$site_url); exit; } }else{ $message='<br><br><font color="red">ログインできませんでした</font><br>'; } } ?>

    • 締切済み
    • PHP
  • vbaからHTTP POST送信しても途中までしかレスポンスが返らない

    Excel2003 VBAからマクロでHTTP POST通信を行いたいと思いますが、リターンコードが200でも979バイトしか取得できません。原因わかる方教えてください。通信状況に関係なく979バイトです。 Dim URL As String Dim WinHttp As Object Set WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1") URL = "http://wwww.aaa.com/login" WinHttp.Open "POST", url, False WinHttp.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded" WinHttp.Send "&username=test&password=abc" If WinHttp.Status < 200 And WinHttp.Status > 399 Then GetUrl = False Exit Function End If MsgBox WinHttp.Status MsgBox WinHttp.ResponseText 取得したデータの最後は <td>&nbsp;&nbsp;&n です。 何卒宜しくお願いします。

専門家に質問してみよう