したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

ヒッキープログラミングスレ

1(-_-)さん:2013/02/26(火) 04:49:59 ID:GABg0f3o
プログラミングの話題のスレ

質問・相談
初心者からプロまで
プログラミングに関することなら何でもOK

102(-_-)さん:2013/04/03(水) 17:56:07 ID:???
PHPがいかに楽か分かるは

103(-_-)さん:2013/04/03(水) 17:57:05 ID:???
そういや、書き込みテストのスレを探さないとな・・・規制中でも書き込める板がいくつかあったはずだな

104(-_-)さん:2013/04/03(水) 18:01:41 ID:???
Iteratorのほうが新しくてこっちが推奨なのか・・・だとすると記述量からしてentrySet()よりkeySet()のほうが記述量が減って楽そうだが・・・

105(-_-)さん:2013/04/03(水) 18:03:15 ID:???
HashtableよりもHashMapのほうが新しいのかHashMap使ったほうがいいのかな

106(-_-)さん:2013/04/03(水) 18:05:11 ID:???
なるほど、Iteratorを使ったほうが削除等が安全に行えるってわけね、でも削除する予定は無いけど・・・うーん

107(-_-)さん:2013/04/03(水) 18:10:32 ID:???
HashtableとHashMapの違いはnull値と同期か、Hashtableは同期処理を内包しててパフォーマンスがやや悪なのか

108(-_-)さん:2013/04/03(水) 18:12:46 ID:???
ネットに転がってるJavaの日本語参考文献がどれも古すぎだわ
< >でくくる、型パラメータ(?)とかいうのが書かれてない古いコード大杉
Java初心者たちには難易度高杉だろ

109(-_-)さん:2013/04/03(水) 18:22:40 ID:???
ひとまずPOST通信を記述する前にHashMapとIteratorに書き換えるは

110(-_-)さん:2013/04/03(水) 18:25:12 ID:???
HashtableをHashMapに置き換えて
確認のをheaderのをコピペでheaderをdataに置き換えるだけで簡単に終わったはw

111(-_-)さん:2013/04/03(水) 18:43:32 ID:???
OK,通信はこれでOK

String post = "";
for (Iterator<Map.Entry<String, String>> i = data.entrySet().iterator(); i.hasNext();) {
Map.Entry<String, String> e = i.next();
post += "&" + e.getKey() + "=" + e.getValue();
}
post = post.substring(1);
System.out.println("post="+post);

try {
URL url = new URL("http://"+server+"/test/bbs.cgi");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
for (Iterator<Map.Entry<String, String>> i = header.entrySet().iterator(); i.hasNext();) {
Map.Entry<String, String> e = i.next();
connection.setRequestProperty(e.getKey(), e.getValue());
}
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
printWriter.print(post);
printWriter.close();
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("Shift_JIS")));
String str;
while ( null != ( str = bufferReader.readLine() ) ) {
System.out.println(str);
}
bufferReader.close();
connection.disconnect();
} catch (Exception e) {
System.err.println(e);
}

112(-_-)さん:2013/04/03(水) 18:50:18 ID:???
getRequestProperties()かgetHeaderFields()でSetCookieの情報を取得すりゃいいのかな?
クッキーはHttpCookieクラス使えばええのんかな

113(-_-)さん:2013/04/03(水) 18:52:35 ID:???
リクエストプロパティはこちらから送るほうでヘッダフィールドが向こうからのレスポンスかな?それぞれ出力して確認してみるか

114(-_-)さん:2013/04/03(水) 18:54:16 ID:???
>>95
ここのPOST通信のコード、スペルミスがあったから気を付けてねん

115(-_-)さん:2013/04/03(水) 19:01:15 ID:???
なるほど、クッキーは他のJavaアプリと共有くさいな・・・やっかいや

116(-_-)さん:2013/04/03(水) 19:05:04 ID:???
CookieManagerというクラスがあるのか、こっち使うべきなのか?

117(-_-)さん:2013/04/03(水) 19:07:39 ID:???
なるほどHttpURLConnectionがCookieHandlerを使うからデフォルトのCookieHandlerをCookieManagerで作ると

118(-_-)さん:2013/04/03(水) 19:13:42 ID:???
クッキーデータを管理するにはCookieStoreの実装を自前で用意せにゃならんのか・・・面倒だな、今んとこはJavaさんに一括管理してもらうか

119(-_-)さん:2013/04/03(水) 19:22:20 ID:???
クッキーを見れたどおお

String post = "";
for (Iterator<Map.Entry<String, String>> i = data.entrySet().iterator(); i.hasNext();) {
Map.Entry<String, String> e = i.next();
post += "&" + e.getKey() + "=" + e.getValue();
}
post = post.substring(1);

CookieManager cm = new CookieManager(); //クッキーの準備
CookieHandler.setDefault(cm);

String httpSource = "";
try {
URL url = new URL("http://"+server+"/test/bbs.cgi");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
for (Iterator<Map.Entry<String, String>> i = header.entrySet().iterator(); i.hasNext();) {
Map.Entry<String, String> e = i.next();
connection.setRequestProperty(e.getKey(), e.getValue());
}
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
printWriter.print(post);
printWriter.close();
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charset.forName("Shift_JIS")));
String str;
while ( null != ( str = bufferReader.readLine() ) ) {
httpSource += str;
}
bufferReader.close();
connection.disconnect();
} catch (Exception e) {
System.err.println(e);
}

//クッキーチェック
System.out.println(httpSource);
for (Iterator<HttpCookie> i = cm.getCookieStore().getCookies().iterator(); i.hasNext();) {
HttpCookie hc = i.next();
System.out.println(hc);
}

120(-_-)さん:2013/04/03(水) 19:26:31 ID:???
さすがにCookieStoreの自前実装は面倒すぎるなあ・・・でもこれクリアしないと他のJavaアプリとクッキー共有くさいしなあ・・・

121(-_-)さん:2013/04/03(水) 19:31:03 ID:???
ひとまずクッキーは自動保存されるぽいし
書き込みの成功の可否をチェックするためhttpSourceをDOMに突っ込むという段階に行きますか
次はJavaのDOMをググって調べますか・・・

122(-_-)さん:2013/04/03(水) 20:56:11 ID:???
Meryダメだな
インデントの設定がgPadに劣るか

123(-_-)さん:2013/04/03(水) 21:11:24 ID:???
ただgPadだと背景が黒になるのがなあ・・・変えるの面倒だし
Meryのお気に入りのプラグインも微妙だし

124(-_-)さん:2013/04/03(水) 21:13:12 ID:???
DocumentBuilderFactoryはスレッドセーフじゃないってあぶねえな

125(-_-)さん:2013/04/03(水) 21:23:50 ID:???
XML Schemaねぇ・・・

126(-_-)さん:2013/04/04(木) 02:48:10 ID:???
おまえらはプログラミングで何作るん?どのプログラミング言語習得中なの?

127(-_-)さん:2013/04/04(木) 05:34:55 ID:???
どうしてJaveでCookieが取得できないんだろう?(1): Javaでアプリケーション作りたい
ttp://tomott.cocolog-nifty.com/blog/2010/08/javecookie1-87d.html

128(-_-)さん:2013/04/04(木) 15:07:29 ID:???
なるほど、デフォルトのクッキーマネージャはメモリ上にクッキー情報を保管するのか他のJavaアプリと共有ってわけじゃないのね
クッキーストアを取得してクッキー情報を読み書きでファイル保存読込が楽そうなんだけど
普通はやっぱりクッキーストアを自分で作るのが普通なのかね・・・まぁ大半の処理をスーパークラスに投げちゃえば簡単だろうけど

129(-_-)さん:2013/04/04(木) 15:27:32 ID:???
つチラ裏

130(-_-)さん:2013/04/04(木) 20:26:49 ID:???
お堅いこといいなさんな
コテつけてNGしやすくするから許してちょんまげ

131わたあ ◆dRaGonNY3U:2013/04/05(金) 09:35:26 ID:???
コテつけたお

132わたあ ◆dRaGonNY3U:2013/04/05(金) 09:42:10 ID:???
ひとまず自前でCookieStoreを実装してみっか、てか全部superクラスの呼び出すだけのだけどw
addメソッドとremoveメソッドのとこにSystem.out.println("cookie add");とか入れてどのタイミングで呼び出されてるかチェキラ!

133わたあ ◆dRaGonNY3U:2013/04/05(金) 09:45:34 ID:???
ん・・・?

ほぎゃああああああああ!CookieStoreってインターフェースかよ・・・全部自己実装が必要ジャマイカ・・・

134わたあ ◆dRaGonNY3U:2013/04/05(金) 12:06:01 ID:???
一応でけた

public class MyCookieStore implements CookieStore {

HashSet<URI> uris = new HashSet<URI>();
HashMap<String, HttpCookie> cookies = new HashMap<String, HttpCookie>();
File cookiedir = null;
File uridir = null;

public MyCookieStore() {
System.out.println("MyCookieStore.Constractor");
this.cookiedir = new File(System.getProperty("user.dir"), "cookie");
if (this.cookiedir.exists() == false) this.cookiedir.mkdir();
try {
File[] files = this.cookiedir.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println("cookie["+i+"]="+files[i]);
BufferedReader reader = new BufferedReader(new FileReader(files[i]));
this.cookies.put(files[i].getName(), new HttpCookie(files[i].getName(), reader.readLine()));
reader.close();
}
this.uridir = new File(System.getProperty("user.dir"), "uri");
if (this.uridir.exists() == false) this.uridir.mkdir();
files = this.uridir.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println("uri["+i+"]="+files[i]);
BufferedReader reader = new BufferedReader(new FileReader(files[i]));
this.uris.add(new URI(reader.readLine()));
reader.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

public void add(URI uri, HttpCookie cookie) {
System.out.println("MyCookieStore.add("+uri+", "+cookie+")");
try {
this.cookies.put(cookie.getName(), cookie);
PrintWriter writer = new PrintWriter(new File(this.cookiedir, cookie.getName()));
writer.print(cookie.getValue());
writer.close();
if (this.uris.add(uri)) {
writer = new PrintWriter(new File(this.uridir, "uri"+this.uris.size()));
writer.print(uri.toString());
writer.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

public List<HttpCookie> get(URI uri) {
System.out.println("MyCookieStore.get("+uri+")");
return this.getCookies();
}

public List<HttpCookie> getCookies() {
System.out.println("MyCookieStore.getCookies()");
return new Vector<HttpCookie>(this.cookies.values());
}

public List<URI> getURIs(){
System.out.println("MyCookieStore.getURIs()");
return new Vector<URI>(this.uris);
}

public boolean remove(URI uri, HttpCookie cookie) {
System.out.println("MyCookieStore.remove("+uri+", "+cookie+")");
this.cookies.remove(cookie.getName());
return true;
}

public boolean removeAll() {
System.out.println("MyCookieStore.removeAll()");
this.cookies.clear();
File[] files = this.cookiedir.listFiles();
for (int i = 0; i < files.length; i++) {
files[i].delete();
}
return true;
}
}

135わたあ ◆dRaGonNY3U:2013/04/05(金) 12:08:45 ID:???
クッキーの削除抜けてた


public boolean remove(URI uri, HttpCookie cookie) {
System.out.println("MyCookieStore.remove("+uri+", "+cookie+")");
this.cookies.remove(cookie.getName());
File file = new File(this.cookiedir, cookie.getName());
if (file.exists()) file.delete();
return true;
}

136わたあ ◆dRaGonNY3U:2013/04/05(金) 12:45:12 ID:???
おお・・・クッキーのドメインとパスを保存してないからアカン・・・アカンのか

137わたあ ◆dRaGonNY3U:2013/04/05(金) 12:46:35 ID:???
んお!?
PONのドメインは鯖別なのか?

138(-_-)さん:2013/04/05(金) 12:47:49 ID:???
Twitterでやれよ

139わたあ ◆dRaGonNY3U:2013/04/05(金) 13:16:02 ID:???
ツイッターは知らん

140わたあ ◆dRaGonNY3U:2013/04/05(金) 13:16:17 ID:???
ドメイン別に保存するよう作り変えるわ

141わたあ ◆dRaGonNY3U:2013/04/05(金) 13:44:13 ID:???
ドメイン別クッキー保存に修正したお

public class MyCookieStore implements CookieStore {

HashSet<URI> uris = new HashSet<URI>();
HashSet<HttpCookie> cookies = new HashSet<HttpCookie>();
File cookiedir = null;
File uridir = null;

public MyCookieStore() {
System.out.println("MyCookieStore.Constractor");
try {
this.cookiedir = new File(System.getProperty("user.dir"), "cookie");
if (this.cookiedir.exists() == false) this.cookiedir.mkdir();
File[] dirs = this.cookiedir.listFiles(new FileFilter(){
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
HttpCookie cookie = null;
for (int i = 0; i < dirs.length; i++) {
System.out.println("cookiedir["+i+"]="+dirs[i]);
File[] files = dirs[i].listFiles(new FileFilter(){
public boolean accept(File pathname) {
return pathname.isFile();
}
});
for (int j = 0; j < files.length; j++) {
System.out.println("cookiefile["+j+"]"+files[j]);
BufferedReader reader = new BufferedReader(new FileReader(files[j]));
this.cookies.add(cookie = new HttpCookie(files[j].getName(), reader.readLine()));
cookie.setDomain(reader.readLine());
cookie.setPath(reader.readLine());
cookie.setVersion(Integer.parseInt(reader.readLine()));
reader.close();
}
}
this.uridir = new File(System.getProperty("user.dir"), "uri");
if (this.uridir.exists() == false) this.uridir.mkdir();
File[] files = this.uridir.listFiles();
for (int i = 0; i < files.length; i++) {
System.out.println("uri["+i+"]="+files[i]);
BufferedReader reader = new BufferedReader(new FileReader(files[i]));
this.uris.add(new URI(reader.readLine()));
reader.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

142わたあ ◆dRaGonNY3U:2013/04/05(金) 13:44:32 ID:???
public void add(URI uri, HttpCookie cookie) {
System.out.println("MyCookieStore.add("+uri+", "+cookie+")");
try {
this.cookies.add(cookie);
File dir = new File(this.cookiedir, cookie.getDomain().replace(".", "_"));
if (dir.exists() == false) dir.mkdir();
PrintWriter writer = new PrintWriter(new File(dir, cookie.getName()));
writer.println(cookie.getValue());
writer.println(cookie.getDomain());
writer.println(cookie.getPath());
writer.println(cookie.getVersion());
writer.close();
if (this.uris.add(uri)) {
writer = new PrintWriter(new File(this.uridir, "uri"+this.uris.size()));
writer.print(uri.toString());
writer.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

public List<HttpCookie> get(URI uri) {
System.out.println("MyCookieStore.get("+uri+")");
ArrayList<HttpCookie> list = new ArrayList<HttpCookie>();
try {
for (Iterator<HttpCookie> i = this.cookies.iterator(); i.hasNext(); ) {
HttpCookie cookie = i.next();
if (HttpCookie.domainMatches(cookie.getDomain(), uri.toURL().getHost())) {
list.add(cookie);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}

public List<HttpCookie> getCookies() {
System.out.println("MyCookieStore.getCookies()");
return new ArrayList<HttpCookie>(this.cookies);
}

public List<URI> getURIs() {
System.out.println("MyCookieStore.getURIs()");
return new ArrayList<URI>(this.uris);
}

public boolean remove(URI uri, HttpCookie cookie) {
System.out.println("MyCookieStore.remove("+uri+", "+cookie+")");
this.cookies.remove(cookie.getName());
File file = new File(this.cookiedir, cookie.getName());
if (file.exists()) file.delete();
return true;
}

public boolean removeAll() {
System.out.println("MyCookieStore.removeAll()");
this.cookies.clear();
File[] files = this.cookiedir.listFiles();
for (int i = 0; i < files.length; i++) {
files[i].delete();
}
return true;
}
}

143わたあ ◆dRaGonNY3U:2013/04/05(金) 13:54:32 ID:???
removeとremoveAllの修正忘れてた


public boolean remove(URI uri, HttpCookie cookie) {
System.out.println("MyCookieStore.remove("+uri+", "+cookie+")");
this.cookies.remove(cookie);
File dir = new File(this.cookiedir, cookie.getDomain().replace(".", "_"));
if (dir.exists() == false) return true;
File file = new File(dir, cookie.getName());
if (file.exists()) file.delete();
if (dir.listFiles().length == 0) dir.delete();
return true;
}

public boolean removeAll() {
System.out.println("MyCookieStore.removeAll()");
this.cookies.clear();
File[] dirs = this.cookiedir.listFiles(new FileFilter(){
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});
for (int i = 0; i < dirs.length; i++) {
File[] files = dirs[i].listFiles(new FileFilter(){
public boolean accept(File pathname) {
return pathname.isFile();
}
});
for (int j = 0; j < files.length; j++) {
files[j].delete();
}
if (dirs[i].listFiles().length == 0) dirs[i].delete();
}
return true;
}

144わたあ ◆dRaGonNY3U:2013/04/05(金) 23:49:36 ID:???
DOMのAPIマニュアルだけ見て色々試行錯誤してみてるが
やはりちゃんとググるかしないとダメぽ・・・
DocumentBuilderFactoryからDocumentBuilder作るまではよかったが
単純にファイル渡したらUTF-8がどうのこうの出て、まぁ文字コードの問題かとCharsetとか色々見て回ったけど答えにたどり着くのにかなり時間がかかった
文字コードの変換はChareset使ったデコード以外に>>119でつかったInputStreamReaderがあるってことに気づくのにかなり時間がかかった(>>119のコードは大半コピペだしw)
で次なる問題はDocumentBuilderにReaderは直接は渡せないと、そこでInputStreamの引数でどうしたら渡せるかと結構悩んだ
実はInputSourceというDOM用のクラスがReader渡せると気づくのにすげえ時間かかった
まとめるとこんな感じ
Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
new InputSource(new InputStreamReader(new FileInputStream(
new File(System.getProperty("user.dir"), "test.html")), Charset.forName("Shift_JIS"))));

145わたあ ◆dRaGonNY3U:2013/04/05(金) 23:51:49 ID:???
ただ問題がそこじゃなくて、2chの書き込み確認ページのソースそのままコピーして作ったtest.htmlなんだけど
METAタグに終了タグがないというXMLのエラーが出て、エラーハンドラーなるもの設置すれば回避もできるような風なAPIドキュメントには書いてあるぽいというか
やはりググらなければ分からんだろうな、ってとこ

146わたあ ◆dRaGonNY3U:2013/04/05(金) 23:52:50 ID:???
まさか厳格なXML定義に基づいてるのか、XMLにはあんまり明るくないのでよくは分からんが今調べてる最中

147わたあ ◆dRaGonNY3U:2013/04/05(金) 23:54:17 ID:???
まぁ自分でドキュメント読んで調べながら作るって、ようは車輪の再開発とか言われる無駄行為なんだろうけどさ、
おそらくググれば一発解決するようなレベルなんだろうけどさ、自分で調べて考えて解決って楽しいよね?俺はそれが楽しいからやってる

148わたあ ◆dRaGonNY3U:2013/04/05(金) 23:58:31 ID:???
Javadocっていうの?このAPIドキュメントってのは、これjavaSE1.6用の日本語のを昔DLした奴を読んでるんだが(ネットでも日本語版が公開されてるがしかも1.4〜1.6までw)
外部サイトへのリンクが死んでるの多いのな、java7用のドキュメントは全部英語で読む気しないのだが
まぁ使ってるjdkが1.7だから最新のドキュメントを読んだほうがいいのだが

149わたあ ◆dRaGonNY3U:2013/04/06(土) 00:06:28 ID:???
あ、今気づいた、DocumentBuilderにsetErrorHandlerがあるじゃないか!これに適当なErrorHandler設定すりゃいいのかな?試してみる!

150わたあ ◆dRaGonNY3U:2013/04/06(土) 00:10:35 ID:???
さっきのエラーメッセージからするとMETAの終了タグなしはFatal Errorらしいが、これって深刻なエラーってことだよな・・・

151わたあ ◆dRaGonNY3U:2013/04/06(土) 00:18:02 ID:???
どうもFatalErrorはエラーハンドラー設定してもスルーできないようだ・・・パーサで何か設定するってことかな

152わたあ ◆dRaGonNY3U:2013/04/06(土) 01:16:16 ID:???
なんと、APIドキュメントにあったDTDが気になってすべてのクラス一覧から見たらswingにhtmlの解析のパーサがあるじゃないか、これ使って試してみるか

153わたあ ◆dRaGonNY3U:2013/04/06(土) 02:07:27 ID:???
3/5 HTML解析ツールを作る [Javaプログラミング] All About
ttp://allabout.co.jp/gm/gc/80633/3/

ここを参考にしてみたお

154わたあ ◆dRaGonNY3U:2013/04/06(土) 02:17:00 ID:???
おーおーでけたでけt

155わたあ ◆dRaGonNY3U:2013/04/06(土) 03:28:41 ID:???
titleタグ、inputタグ、そして2ch_X:???のコメント、body内の文章、全部簡単に取得できた・・・
DocumentBuilderとかで悩んでた苦労は何だったの一体・・・全く無意味だった・・・

156(-_-)さん:2013/04/06(土) 07:15:15 ID:NQNqI24I
今日一日必死で勉強してhtmlをマスターする

157わたあ ◆dRaGonNY3U:2013/04/06(土) 14:42:48 ID:???
Borland C++ Compiler 5.5も入れてんだがそれのMakeでjavaもコンパイルできんのな

JC = javac
AllFiles: Test.class\
MyCookieStore.class
.path.class = class
.java class.class:
@if not exist class @mkdir class
$(JC) $. -d class

158わたあ ◆dRaGonNY3U:2013/04/06(土) 14:47:51 ID:???
テスト用のバッチも作ってみた
j Test
で java Test を実行できる
コマンドプロンプトの補完機能で
j Test.java
でもjava Test を実行できるようにしてみた

@rem j.bat
@echo off
if "%~n1"=="" goto errorlabel1
if not exist class mkdir class
if not exist "class\%~n1.class" goto errorlabel2
java -cp class %~n1
goto endlabel
:errorlabel1
echo 引数が指定されてません
goto endlabel
:errorlabel2
echo %~n1.class が存在しません
goto endlabel
:endlabel

159わたあ ◆dRaGonNY3U:2013/04/06(土) 14:54:33 ID:???
さっきのMakefileに合わせてmakeも簡単にできるようにバッチにしてみた
m のみで make
m Test もしくは m Test.java で make Test.class
を実行する

@rem m.bat
@echo off
if not exist class mkdir class
if "%~n1"=="" goto noargument
if not exist "%~n1.java" goto errorlabel1
make %~n1.class
goto endlabel
:noargument
make
goto endlabel
:errorlabel1
echo %~n1.java が存在しません
goto endlabel
:endlabel

160わたあ ◆dRaGonNY3U:2013/04/06(土) 23:20:38 ID:???
初回投稿は成功したけど
2回目投稿ができないんだが・・・

161わたあ ◆dRaGonNY3U:2013/04/07(日) 00:11:57 ID:???
ちょっと原因がわからない・・・初回投稿というのしかできない

162わたあ ◆dRaGonNY3U:2013/04/07(日) 00:12:25 ID:???
クッキーはJava側がちゃんと処理してくれてるはずなんだが・・・

163わたあ ◆dRaGonNY3U:2013/04/07(日) 00:20:29 ID:???
ERROR:ブラウザを立ち上げなおしてみてください。
というエラーなんだが、時間が進んでるとなるって?

164わたあ ◆dRaGonNY3U:2013/04/07(日) 00:21:18 ID:???
unixタイム・・・って秒なのか?、つまりミリセコンドじゃないのか、そうかこれ直せばいいのかな

165わたあ ◆dRaGonNY3U:2013/04/07(日) 00:25:53 ID:???
おお!System.currentTimeMillis()-2000が悪かったんだな!
System.currentTimeMillis()/1000-2にしたら書き込めたぞ!

166わたあ ◆dRaGonNY3U:2013/04/07(日) 00:27:57 ID:???
念のため-2じゃなく-3600にしといた
1時間も時間がズレることはないだろうけど、10分くらいならズレそう

167わたあ ◆dRaGonNY3U:2013/04/07(日) 01:23:55 ID:???
http://www1.axfc.net/uploader/so/2859854.zip
コードここに全部貼り付けるのは何なんで成果物をうpした
ファイル内容は
WritingTest.java
BBS2chWriter.java
MyCookieStore.java
Compile.bat


168わたあ ◆dRaGonNY3U:2013/04/07(日) 01:26:40 ID:???
compile.bat
でコンパイルして
cd class
java WritingTest
で実行な
WritingTest.javaのソースコードから鯖名や板名やスレ番を変えてくれ
ソースコードのスレは↓のスレ

てすとスレ
http://uni.2ch.net/test/read.cgi/entrance2/1341499475/

169わたあ ◆dRaGonNY3U:2013/04/07(日) 01:28:05 ID:???
これはまだ決まったスレに書き込むことしかできないしアレだけどな

170わたあ ◆dRaGonNY3U:2013/04/07(日) 01:32:09 ID:???
課題はまだあって忍法帖のクッキーのHAPがドメイン別に大量に発行されてまうのだが
これまとめたほうがいいんだろうな・・・

171わたあ ◆dRaGonNY3U:2013/04/07(日) 01:33:23 ID:???
MyCookieStore.javaはまだ改良の余地が大量にあるな

172わたあ ◆dRaGonNY3U:2013/04/07(日) 01:34:32 ID:???
やはりIEのクッキーファイルチェックしてみたが
.2ch.net指定のHAPはuni.2ch.netやtoro.2ch.netとかに保存されてないや

173わたあ ◆dRaGonNY3U:2013/04/07(日) 01:58:10 ID:???
おお、クッキーの仕様に名前の重複はアカンとあるな、

174わたあ ◆dRaGonNY3U:2013/04/07(日) 01:58:45 ID:???
MyCookieStore.javaがW3Cの仕様にそってないので>>167は消した

175わたあ ◆dRaGonNY3U:2013/04/07(日) 03:04:40 ID:???
PHPでテストしてみたが
IEもOperaもFireFoxも同名クッキーの処理してないくさいな
パスが同じ上位ドメインで同名クッキー発行しても両方送信してる・・・
同じ名前だと先に設定したクッキーのほうが前に設置され
それをPHPがクッキーだと認識してるな

176わたあ ◆dRaGonNY3U:2013/04/07(日) 03:06:20 ID:???
パスが同じだと先に設定されたクッキーが前方に設置で送信されて
パスが違うとドメインが優先されてるのか

177わたあ ◆dRaGonNY3U:2013/04/07(日) 03:26:12 ID:???
んん?そういうわけじゃないのか
2chのHAPだとIEもOperaもFireFoxも上位ドメインのほうのだけ記録されるけど
俺の作ったテスト用PHPだとIEもOperaもFireFoxも下位ドメインのクッキーも記録される・・・
これは一体どういうことだ!?

178わたあ ◆dRaGonNY3U:2013/04/07(日) 03:38:05 ID:???
違うな、IEとかOperaとかFireFoxだとそもそも下位ドメインのクッキー要求が来ない
だけど俺の作ったやつだとCookieStoreのaddメソッドがHAPが2回呼ばれそれぞれドメインのレベルが違うわけだが
これはもしかしてJava側のHTTP通信の実装の問題か?

179わたあ ◆dRaGonNY3U:2013/04/07(日) 03:40:23 ID:???
てかFireFoxにクッキーモンスターとかいう怖い仕様があったのな(7年前の記事にあった),
今はどうなんだろうか

180わたあ ◆dRaGonNY3U:2013/04/07(日) 04:21:52 ID:???
もしかしてJavaのバグじゃなく2chのbbs.cgiのバグか?
そういえば作ったPHPのほうの挙動はIEとかと同じだった
もしbbs.cgiがUserAgentの違いで発行するクッキーが違うのだとしたら・・・
どうだろ

181わたあ ◆dRaGonNY3U:2013/04/07(日) 04:31:15 ID:???
getHeaderFields()でヘッダを見てみたが
やはりSetCookieでドメイン指定と未指定のHAPが2つ発行されてるのな
monazilla公式だと.2ch.netのドメインが正しいようだから
HAP限定で別途処理するか・・・

182わたあ ◆dRaGonNY3U:2013/04/07(日) 04:33:51 ID:???
HAPを2つも送信したら通信量がとんでもないからな(つかこちらからの送信は抑えられるが向こうからの送信は抑えられねえな)

183わたあ ◆dRaGonNY3U:2013/04/07(日) 04:42:49 ID:???
今気づいたけど自作のMyCookieStoreはpathの違いを考慮してなかったな
ドメインの違いは考慮するけど、まぁ2chから発行されるクッキーにそんな考慮はいらんかもだけど
汎用性を持たせたいじゃん
今はドメイン名フォルダ別でクッキー名ファイルで直保存だけどこれだとパスの違いが考慮されんからなあ
パスフォルダでも作るか?

184わたあ ◆dRaGonNY3U:2013/04/07(日) 04:47:00 ID:???
そうか、ドメイン+パス+クッキー名のキーとファイル名を対応させたマップ作って
ファイル名はクソ適当に連番でつけりゃいいか

185わたあ ◆dRaGonNY3U:2013/04/07(日) 04:49:44 ID:???
いや、HttpCookieのインスタンスをそのままキーにすりゃいいのか

186わたあ ◆dRaGonNY3U:2013/04/07(日) 04:54:55 ID:???
おお、HashSetの説明よく読んだら、HttpCookieのequals()仕様だとvalueが比較されないから新しいのに交換されないのな、
ここも変えないと・・・

187わたあ ◆dRaGonNY3U:2013/04/07(日) 05:42:03 ID:???
おし、MyCookieStore改修成功!

188わたあ ◆dRaGonNY3U:2013/04/07(日) 16:25:41 ID:???
CookieStoreのaddで送られてくるURIを保存してたがこれはちょっと違うかw
あとURIのtoString()で保存してたけど、URIはシリアライズできるからwriteObject()で保存してみたが、toString()と何ら変わらない感じだ・・・

189わたあ ◆dRaGonNY3U:2013/04/07(日) 18:39:12 ID:???
MyCookieStoreに汎用性を付けるために大幅改造中

190わたあ ◆dRaGonNY3U:2013/04/07(日) 18:39:53 ID:???
とはいえ大量のサイトアクセスしちゃうとHashMapとかで管理するのは微妙かなあ・・・メモリサイズ的に

191わたあ ◆dRaGonNY3U:2013/04/07(日) 18:41:40 ID:???
とはいえほとんど終わっててあとはremoveとremoveAllのみ作ればいい

192わたあ ◆dRaGonNY3U:2013/04/07(日) 23:06:01 ID:???
ちょい修正したがMyCookieStoreが完成した。

193わたあ ◆dRaGonNY3U:2013/04/08(月) 00:09:18 ID:???
さて、2ch書き込みの通信はクリアしたので次は板一覧の取得に挑戦かな

194わたあ ◆dRaGonNY3U:2013/04/08(月) 01:29:22 ID:???
monazillaでしたらばとまちBBSは2chと仕様がかなり違うみたい
しかもしたらばは文字コードが一部EUCとか・・・
書き込み用に作ったクラスの文字コードの処理が入ってねえな・・・

195わたあ ◆dRaGonNY3U:2013/04/08(月) 03:20:00 ID:???
HAP値が2回来るって書いたけど、expiresの値を見たら片方は過去の日付が設定されてた
つまり一方はHAP値を消すために来てたというわけでそりゃIEやOperaやFireFoxでは表示されないわな

196わたあ ◆dRaGonNY3U:2013/04/08(月) 03:24:00 ID:???
ただ問題は過去の期限が設定されてるHAP値がdomainを指定してないので同一のHttpCookieと認識されないこと
あとCookieの仕様からして過去の期限ならaddじゃなくremoveが呼び出されるべきなのにこれはJavaの仕様の問題か

197わたあ ◆dRaGonNY3U:2013/04/08(月) 03:26:42 ID:???
あと値も期限もドメインもパスも変わってないのにPRENのSet-Cookieが書き込み成功時のたびに送信されてくるのな

198わたあ ◆dRaGonNY3U:2013/04/08(月) 03:42:15 ID:???
書き込み頻繁に行うとHAP値の書き換えが頻出するなこれ
ディスクへの読み書きが増える現在の俺のMyCookieStoreじゃマズいなこれ
ブラウザ起動時と終了時にクッキーの読み込み保存するだけならデフォのCookieStoreでも問題ないしなあ・・・

しゃーない、せっかくMyCookieStoreを何時間も費やして作ったが
デフォのクッキーストア使うか・・・これはメモリ上だけに構築されるらしいしね

199わたあ ◆dRaGonNY3U:2013/04/08(月) 03:43:53 ID:???
おお、CookieManagerのAPIドキュメントに書いてあった、addとgetしか使わないって・・・頑張ったのにMyCookieStore作ったけど結果無意味だったな・・・無駄な時間だった

200わたあ ◆dRaGonNY3U:2013/04/08(月) 12:40:06 ID:???
デフォのCookieStoreの作りが気になったので
jdkフォルダ内にあるsrc.zipを展開してCookieManager.javaを見てみたら
デフォのCookieStoreはInMemoryCookieStore.javaということが分かり見てみた
全然作りが違った、期限切れのCookieは保存しないようにしてたしURIの管理方法も違った
何よりもちゃんと同期処理をしてた、同期処理はsynchronizedを使うもんだと思ってたが簡単にできるクラスがあったのな勉強になった
すげえな、確かにpure javaだったわ

201わたあ ◆dRaGonNY3U:2013/04/08(月) 12:44:37 ID:???
あとInMemoryCookieStoreはドメイン管理に
HttpCookie.domainMatchesとは別のメソッドも用意してて
Cookieのバージョンに合わせて使い分けてた、domainMatchesがバージョン1用だなんてAPIドキュメントには書いてなかったぞ・・・
まぁおそらくCookieの仕様が書いてあるRFCとかに書いてあるんだろうけど・・・・




掲示板管理者へ連絡 無料レンタル掲示板