• 締切済み

ニコニコ動画のクッキーの扱いについて(IE)

ニコニコ動画のクッキーファイルを用いて、動画を閲覧させたいと思っています。 一般的に格納されている C:\Documents and Settings\username\Cookies から、username@nicovideo[n].jpファイルを開き、 user_session_xxxxxx_xxxxxxxxxxxxxxxxxxxxxx を取得しています。 上記のクッキーを用いて、ニコニコ動画Topにアクセスさせたのですが ログイン情報を取得できませんでした。(ログイン済み) 下記にソースの一部を抜粋しますので、「ここがおかしい」という点があればご教授お願い致します。 URL url = new URL("http://www.nicovideo.jp/"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Referer","http://www.nicovideo.jp/"); conn.setRequestProperty("Cookie", cookieValue); //cookieValueはStrng型でcookieのuser_sessionが格納されている conn.setInstanceFollowRedirects(false); conn.connect(); InputStreamReader isr = new java.io.InputStreamReader(conn.getInputStream(), "UTF-8"); BufferedReader br = new java.io.BufferedReader(isr); String t = null; String line = null; hile (null != (line = br.readLine())) { t = t + line + "\n"; System.out.println(line); } 取得した結果は「ようこそゲストさん」となり、ログインした状態の内容を取得できていませんでした。

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

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.2

あ、それもそうね。 ごめんなさいだわ。 Cookieクラスの内部構造の話と混同したわ。 なので必要なのは1つね。 ニコニコ動画がどのキーで認証をしているのかわからないけど そのuser_sessionを使うなら user_session=2行目 と言う形で送信する必要があるわ。 複数必要なら;でつなげて送ってあげて。 key1=value1;ke2=value2;key3=value3 こんな感じ。

nekodake
質問者

お礼

回答ありがとうございました。 お蔭様で、無事自分の意図する処理が行えることが出来ました。 お手数お掛け致しました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

> ここがおかしい ・whileのwがない。まあこれはどうでもいいか。 ・たぶんあなたCookieファイルの読み方がわかっていないわ。 ・なんでニコニコ動画?  他人様のサイトでテストしちゃダメでしょ。  何かあった場合責任取れるの? Cookieファイルは次のように記述されているの。 --ここから key1 value1 etc etc etc etc etc etc * key2 value2 etc etc etc etc etc etc * key3 value3 etc etc etc etc etc etc * --ここまで-- ちなみにetcは今回に関係ないから省略したわ。 *は区切り文字ね。 複数の値が設定されている場合はここまでが繰り返されるわ。 上記の様なCookieファイルの場合は次のように設定するべきよ。 conn.setRequestProperty("Cookie", "key1=value1"); conn.setRequestProperty("Cookie", "key2=value2"); conn.setRequestProperty("Cookie", "key3=value3");

nekodake
質問者

お礼

回答ありがとうございます。 >・whileのwがない。まあこれはどうでもいいか。 初歩的ミスです。すみませんでした。 >・たぶんあなたCookieファイルの読み方がわかっていないわ。 はい、仰るとおりです。 cookieの扱い方が理解できておらず、手探り状態でした。 >・なんでニコニコ動画?  他人様のサイトでテストしちゃダメでしょ。  何かあった場合責任取れるの? 軽率な行為でした。 ニコニコ動画の動画リストを作成するソフトを作りたかったのです。 以下、疑問点です。 >複数の値が設定されている場合はここまでが繰り返されるわ。 >上記の様なCookieファイルの場合は次のように設定するべきよ。 >conn.setRequestProperty("Cookie", "key1=value1"); >conn.setRequestProperty("Cookie", "key2=value2"); >conn.setRequestProperty("Cookie", "key3=value3"); 上記の設定方法では、"Cookie"というkeysに"key3=value3"が格納されるだけではないでしょうか?("key1=value1"、"key2=value2"は上書きされる?) よろしければ回答して頂きますよう宜しくお願い致します。

関連するQ&A

  • httpsサイトからのhtmlソース取得

    以下のようなコードを書いてみましたところ、httpサイト (1) からはhtmlソースが全行取得できたのですが、httpsサイト (2) からは途中約1/3以降からしか得られませんでした。 ところが、httpsサイトでも (3) を試したところ全部取得できます。何がいけないのか~何を調べればよいのか~が分からず困惑しております。ご教示いただけましたら幸いです。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.net.URL; import java.net.HttpURLConnection; import javax.net.ssl.HttpsURLConnection; public class GetHtmlTest { public static void main(String[] args) { try { URL u = new URL("http://stocks.finance.yahoo.co.jp/stocks/detail/?code=2371.T"); // (1) HttpURLConnection con = (HttpURLConnection) u.openConnection(); // (1) InputStreamReader isr = new InputStreamReader(con.getInputStream(), "UTF-8"); // (1) // URL u = new URL("https://www.sbisec.co.jp/ETGate"); // (2) // HttpsURLConnection con = (HttpsURLConnection) u.openConnection(); // (2) // InputStreamReader isr = new InputStreamReader(con.getInputStream(), "SJIS"); // (2) // URL u = new URL("https://www.monex.co.jp/Login/00000000/login/ipan_web/hyoji"); // (3) // HttpsURLConnection con = (HttpsURLConnection) u.openConnection(); // (3) // InputStreamReader isr = new InputStreamReader(con.getInputStream(), "SJIS"); // (3) BufferedReader br = new BufferedReader(isr); String line; StringBuilder sb = new StringBuilder(); while ((line = br.readLine()) != null) { sb.append(line).append(System.getProperty("line.separator")); } System.out.println(sb.toString()); br.close(); isr.close(); } catch (IOException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • javaについて

    こういうプログラムを組んだんですが、うまく実行できません。 どんな改善をしたらよいでしょうか? import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class Sample { public static void main(String[] args) { String htmlSrc = getHTMLSrc("http://search.yahoo.co.jp/search?p=java", "UTF-8"); htmlSrc = htmlSrc.replaceAll("<.+?>| ", ""); htmlSrc = htmlSrc.replaceAll(".*件-", ""); htmlSrc = htmlSrc.replaceAll("秒.*", "秒"); System.out.println(htmlSrc); } private static String getHTMLSrc(String strURL, String charSet) { StringBuffer sb = new StringBuffer(); HttpURLConnection conn = null; BufferedReader br = null; try { URL url = new URL(strURL); conn = (HttpURLConnection)url.openConnection(); InputStreamReader isr = new InputStreamReader(conn.getInputStream(), charSet); br = new BufferedReader(isr); String tmp = ""; while ((tmp = br.readLine()) != null) { sb.append(tmp); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } if (conn != null) { conn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } } 以下のエラーが表示されるんですが、どうしたらよいでしょうか?? 環境が悪いのでしょうか?? java.net.ConnectException: Operation timed out

    • ベストアンサー
    • Java
  • javaについて>IEのクッキーを使いたい

    IEでログインした状態であれば、ヤフーメールなどクッキーを使うHPにアクセスできるかと思ったのですがアクセスできません。どうすればよいでしょうか? 多分、javaはIEのクッキーを利用していないのですよね・・・ 何とか、IEのクッキーを利用できれば良いのですが。何か、良いお知恵はありませんでしょうか? 宜しくお願い致します。 以下、コードです。 ーーーーーーーーーーーーーーーーーーーーーーー import java.io.*; import java.net.*; class Test { static String input() throws IOException { InputStream is = new FileInputStream("url.txt");//urlを入力 BufferedReader br = new BufferedReader(new InputStreamReader(is)); String str = br.readLine(); return(str); } static void read(String str) throws IOException { OutputStream os = new FileOutputStream("log.txt",true); BufferedWriter fr = new BufferedWriter(new OutputStreamWriter(os)); URL url = new URL(str); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"JISAutoDetect")); for (;;) { String i = in.readLine(); if(i == null) { break; } System.out.println(i + "\n"); fr.write(i + "\n"); } in.close(); fr.close(); } public static void main(String[] args) throws IOException { Test brow = new Test(); brow.read(brow.input()); } }

    • ベストアンサー
    • Java
  • javaについて

    このプログラムは文字を入力して、検索をかけてその検索にかかった秒数を表示するものですが、検索数を表示するのにはどう書き換えますでしょうか? import java.io.*; import java.net.*; public class Sample { public static void main(String[] args) { System.out.println("入力してください"); String keyword = getKeyword(); String htmlSrc = getHTMLSrc("http://search.yahoo.co.jp/search?p=" + keyword, "UTF-8"); double sec = getSearchSec(htmlSrc); if (sec > 0) { System.out.println("検索秒数は" + sec + "秒"); } else { System.out.println("検索結果0件"); } } private static String getKeyword() { String keyword = ""; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); keyword = br.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } keyword = keyword.replaceAll(" ", "+"); return keyword; } private static String getHTMLSrc(String strURL, String charSet) { StringBuffer sb = new StringBuffer(); HttpURLConnection conn = null; BufferedReader br = null; try { URL url = new URL(strURL); conn = (HttpURLConnection)url.openConnection(); InputStreamReader isr = new InputStreamReader(conn.getInputStream(), charSet); br = new BufferedReader(isr); String tmp = ""; while ((tmp = br.readLine()) != null) { sb.append(tmp); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } if (conn != null) { conn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } private static double getSearchSec(String htmlSrc) { double sec = 0; String tmp = htmlSrc.replaceAll("<.+?>| ", ""); tmp = tmp.replaceAll(".*件-", ""); tmp = tmp.replaceAll("秒.*", ""); try { sec = Double.parseDouble(tmp); } catch (NumberFormatException e) { } return sec; } }

    • ベストアンサー
    • Java
  • javaについて

    このプログラムは文字を入力して、検索をかけてその検索にかかった秒数を表示するものですが、検索数を表示するのにはどうしたらいいでしょうか? import java.io.*; import java.net.*; public class Sample { public static void main(String[] args) { System.out.println("入力してください"); String keyword = getKeyword(); String htmlSrc = getHTMLSrc("http://search.yahoo.co.jp/search?p=" + keyword, "UTF-8"); double sec = getSearchSec(htmlSrc); if (sec > 0) { System.out.println("検索秒数は" + sec + "秒"); } else { System.out.println("検索結果0件"); } } private static String getKeyword() { String keyword = ""; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); keyword = br.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } keyword = keyword.replaceAll(" ", "+"); return keyword; } private static String getHTMLSrc(String strURL, String charSet) { StringBuffer sb = new StringBuffer(); HttpURLConnection conn = null; BufferedReader br = null; try { URL url = new URL(strURL); conn = (HttpURLConnection)url.openConnection(); InputStreamReader isr = new InputStreamReader(conn.getInputStream(), charSet); br = new BufferedReader(isr); String tmp = ""; while ((tmp = br.readLine()) != null) { sb.append(tmp); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } if (conn != null) { conn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } private static double getSearchSec(String htmlSrc) { double sec = 0; String tmp = htmlSrc.replaceAll("<.+?>| ", ""); tmp = tmp.replaceAll(".*件-", ""); tmp = tmp.replaceAll("秒.*", ""); try { sec = Double.parseDouble(tmp); } catch (NumberFormatException e) { } return sec; } }

  • javaでクッキーを取得したい

    以下ソースで、ホームページのデータは取得できるのですが、クッキーが必要なページではうまく作動しません。 どのように改良すればよいでしょうか? また、こういったプログラムを作るのに参考になる書籍をご存知でしたら教えてください。 よろしくお願いいたします。 import java.io.*; import java.net.*; class test { public static void main(String[] args) throws Exception { URL url = null; BufferedReader in = null; String readString = null; url = new URL("http://www.yahoo.co.jp"); in = new BufferedReader(new InputStreamReader(url.openStream(),"JISAutoDetect")); while((readString=in.readLine())!=null) System.out.println(readString); in.close(); } }

    • ベストアンサー
    • Java
  • java 検索数表示ができるようにしたいのですが

    補足へ import java.io.*; import java.net.*; import java.lang.*; public class secc3 { public static void main(String[] args) { System.out.println("入力"); String keyword = getKeyword(); String htmlSrc = getHTMLSrc("http://search.yahoo.co.jp/search?p=" + keyword, "UTF-8"); String sec = getNumSearchHits(htmlSrc); sec = sec.replace(",",""); int ken = Integer.parseInt(sec); System.out.println(ken); if (ken > 0) { System.out.println("Hit数約" + ken + "件"); } else { System.out.println("結果0件"); } } private static String getKeyword() { String keyword = ""; BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(System.in)); keyword = br.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } keyword = keyword.replaceAll(" ", "+"); return keyword; } private static String getHTMLSrc(String strURL, String charSet) { StringBuffer sb = new StringBuffer(); HttpURLConnection conn = null; BufferedReader br = null; try { URL url = new URL(strURL); conn = (HttpURLConnection)url.openConnection(); InputStreamReader isr = new InputStreamReader(conn.getInputStream(), charSet); br = new BufferedReader(isr); String tmp = ""; while ((tmp = br.readLine()) != null) { sb.append(tmp); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } if (conn != null) { conn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } private static String getNumSearchHits(String htmlSrc) { java.util.regex.Pattern p = java.util.regex.Pattern.compile(" / 約([,0-9]+)件 - "); java.util.regex.Matcher m = p.matcher(htmlSrc); return m.find() ? htmlSrc.substring(m.start(1), m.end(1)) : ""; } }

  • このアクセスの仕方はOK?

    以下はプログラムの一部ですが、気になったことがあって、 ・指定しているURLに拡張子がないこと。 ・拡張子がなくてもHTML文書はダウンロードしていいのか。 です。実際にプログラムを組んでダウンロードできたんですが、こういうやりかたでやっていいのかよく考えるうちに不安になったので、質問させていただきました。ご教授お願いします。 URL url = new URL("http://ja.wikipedia.org/wiki/SMAP"); InputStreamReader in = new InputStreamReader(url.openStream(),"UTF-8"); BufferedReader br = new BufferedReader(fr); while((line = br.readLine()) != null){ ......

    • ベストアンサー
    • Java
  • 同じLAN上(別のホスト)のファイル内容を取得する方法

    質問があります。 同じLAN上で別のPCのファイル内容を取得するには どうすればよろしいでしょうか。 例えば、192.168.1.1というIPを持つPCから192.168.1.2というIPを持つPCのc:/text.txtというファイルを読み込みたい場合以下のようなコードを作成したのですが、java.net.ConnectionExceptionというエラーが表示されます。どのように修正すればうまくいくかを教えていただければとてもありがたいです。 よろしくお願いします。 ======================================================= import java.io.*; import java.net.*; public class Sample{ public static void main( String[] args ) { String testStr = ""; //初期化 try{ URL url = new URL("ftp","192.168.1.2",21,"c:/text.txt"); InputStream is = url.openStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader bur = new BufferedReader(isr); while((testStr = bur.readLine()) != null){ System.out.println(csvStr); } } catch(Exception e){ System.err.println(e.toString()); return; } }

    • ベストアンサー
    • Java
  • ブログサイトへの認証の仕方。

    SEESAAブログサイトにログインするプログラムを作成しているのですが。 ログインがうまくできません、以下のプログラムで、行うと、「認証に失敗しました」と記されたhtmlページが変数sbに戻ってきます。 「マイ・ブログ」と記されたhtmlページが変数sbに戻ってくるようにしたいです。 ご教授お願いいたします。 ----------------------------------------------------- import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import javax.net.ssl.HttpsURLConnection; import java.net.URL; public class SeesaaLogin { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); String crlf = null; try { URL url = new URL("https://ssl.seesaa.jp/auth"); HttpsURLConnection conH = (HttpsURLConnection)url.openConnection(); conH.setInstanceFollowRedirects(true); conH.setDoOutput(true); conH.connect(); OutputStream out = conH.getOutputStream(); PrintStream ps = new PrintStream(out); ps.print("email=xxx@xxxx.xx&password=xxxxxx&remember_me=t"); ps.close(); BufferedReader reader = new BufferedReader(new InputStreamReader(conH.getInputStream(), "SJIS")); while (true) { String line = reader.readLine(); if ( line == null ){ break; } sb.append(line + crlf); } } catch(Exception e) { } System.out.println(sb); } } -----------------------------------------------------