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

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

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

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

83(-_-)さん:2013/04/03(水) 14:59:56 ID:???
PHP使える無料鯖を探して2ch規制を突破したい

84(-_-)さん:2013/04/03(水) 15:16:45 ID:???
サンプルコードが無いと
マニュアルとかAPI一覧見ても使い方が分からん

85(-_-)さん:2013/04/03(水) 15:29:26 ID:???
>>83
80ポートが空いてると無理だよ

86(-_-)さん:2013/04/03(水) 15:32:06 ID:???
な、なんだってーっ!?

87(-_-)さん:2013/04/03(水) 15:32:57 ID:???
つまり、このクッキー処理を突破した次でエラーを返されるってことか・・・

88(-_-)さん:2013/04/03(水) 16:06:35 ID:???
うお!マジか、このエラーがそうなのか?


ERROR:変なホスト規制中!! 変なホストです。

89(-_-)さん:2013/04/03(水) 16:12:13 ID:???
http://sv2ch.baila6.jp/chk_proxy3.cgi
でチェックしたら焼かれてたw

90(-_-)さん:2013/04/03(水) 16:13:59 ID:???
俺の努力はいったい・・・orz

91(-_-)さん:2013/04/03(水) 16:17:56 ID:???
ひ、ひとまずだ、2chとのやりとりのノウハウの一部を覚えられたってことで
普通のGUIアプリで2ch専用ブラウザを作れる土台の一部になったってことで

92(-_-)さん:2013/04/03(水) 16:20:57 ID:???
VB.NETかC#かJavaか
ライブラリは豊富だし、さっきのPHPスクリプト量と大差ないだろう
たぶん出来る!

93(-_-)さん:2013/04/03(水) 16:21:38 ID:???
GUIの作りやすさからしてVB.NETかVC#か

94(-_-)さん:2013/04/03(水) 16:22:45 ID:???
Java使ってCUIの専用ブラウザでも作ってみるか

95(-_-)さん:2013/04/03(水) 16:49:59 ID:???
JavaによるHTTPリクエスト時のパラメータの渡し方
ttp://www.dd.e-mansion.com/~kumada/laboratory/column/java_post.html

簡単そう

96(-_-)さん:2013/04/03(水) 17:44:46 ID:???
Javaなげえ、ひとまずここでひといき

String server = "ikura.2ch.net";
Hashtable<String, String> data = new Hashtable<String, String>();
Hashtable<String, String> header = new Hashtable<String, String>();
data.put("bbs", "hikky");
data.put("key", "1362050172");
data.put("time", Long.toString(System.currentTimeMillis() - 2000));
try {
data.put("FROM", URLEncoder.encode("(-_-)さん", "Shift_JIS"));
data.put("mail", URLEncoder.encode("sage", "Shift_JIS"));
data.put("MESSAGE", URLEncoder.encode("テストだよ", "Shift_JIS"));
data.put("submit", URLEncoder.encode("書き込む", "Shift_JIS"));
} catch (Exception e) {
System.err.println(e);
}
header.put("Host", server);
header.put("Accept", "*/*");
header.put("Referer", "http://"+server+"/test/read.cgi/"
+data.get("bbs")+"/"+data.get("key")+"/");
header.put("Accept-Language", "ja");
header.put("User-Agent", "Monazilla/1.00 (monaweb/1.00)");
header.put("Connection", "close");

//確認
System.out.println("data");
for (Enumeration<String> e = data.keys(); e.hasMoreElements();) {
String k = e.nextElement();
System.out.println("key="+k);
System.out.println("value="+data.get(k));
}
System.out.println("header");
for (Iterator<Map.Entry<String, String>> i = header.entrySet().iterator(); i.hasNext();) {
Map.Entry<String, String> k = i.next();
System.out.println("key="+k.getKey());
System.out.println("value="+k.getValue());
}

97(-_-)さん:2013/04/03(水) 17:48:06 ID:???
Enumeration と Iterator はどっちのほうが使いいいのだろうか

98(-_-)さん:2013/04/03(水) 17:49:28 ID:???
entrySet より keySet のほうがややスマートだったか

99(-_-)さん:2013/04/03(水) 17:51:34 ID:???
entrySet()だと値の書き換えメソッドが存在するのか
まぁkeySet()だろうがkeys()だろうがキー名ありゃ値の変更なんて難しくないがな・・・

100(-_-)さん:2013/04/03(水) 17:52:34 ID:???
さて、データの準備ができたから次は初回書き込みのPOSTだ

101(-_-)さん:2013/04/03(水) 17:54:57 ID:???
Content-Length: はやはり自動で設定してくれんのかな?バッファ書き出してclose()したときに自動設定されんのかな?

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つも送信したら通信量がとんでもないからな(つかこちらからの送信は抑えられるが向こうからの送信は抑えられねえな)




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