w3m その8 (738レス)
w3m その8 http://mevius.5ch.net/test/read.cgi/unix/1185784998/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
580: 名無しさん@お腹いっぱい。 [sage] 2017/12/07(木) 09:41:37.17 なんかここ↓のハイパーリンク『次のページ』が踏めない ttp://gihyo.jp/admin/serial/01/ubuntu-recipe/0019 というか、URL が file:/// に化ける謎 http://mevius.5ch.net/test/read.cgi/unix/1185784998/580
582: 名無しさん@お腹いっぱい。 [sage] 2017/12/07(木) 12:48:07.56 >>580 俺のところもなるわ。 HTMLのソースを見ると当該部分は <a href="/admin/serial/01/ubuntu-recipe/0019?page=2" rel="next"> となっているから、hrefのリンク先が '/' で始まってると w3mはローカルファイルへのリンクと判断して "file://" を補うみたいね。 おそらくページ作成者はサーバのルートからの絶対アドレスとして "https://gihyo.jp/" が補われると想定して書いてるのだと思う。 実際に "https://gihyo.jp/admin/sefial..." で次のページが見られるし。 HTMLの文法としてどちらが正しいのか知らんけど、とりあえず現象の分析まで。 http://mevius.5ch.net/test/read.cgi/unix/1185784998/582
586: 580 [sage] 2017/12/07(木) 18:26:35.72 >>582,584,585 なるほど…と思ってよく見たら、これサイト側のベースURLの指定が間違ってるのか 理想: <base href="https://gihyo.jp/" /> 現状: <base href="/" /> サイト側のミスっぽいけど、w3mも機転が足りてない感じがする >>584 utf8版から入ると eucのマニュアルページを読むのが最初の試練だった気が >>581 それは、debianなのか、fedoraなのか、freebsdなのか? http://mevius.5ch.net/test/read.cgi/unix/1185784998/586
588: 580 [sage] 2017/12/08(金) 00:33:44.07 原因自体はそれで確定みたいですね ただ、C言語なんて長いこと触ってないし、複雑過ぎるしで、自分にゃ手に負えんです。 暫定で baseurl を潰すだけで良いなら、 $ ag 'buf->baseurl' *.c file.c の case HTML_BASE: ブロックの中あたりですかね? ……と当てずっぽうに言ってみる てか、すまん http://mevius.5ch.net/test/read.cgi/unix/1185784998/588
589: 580 [sage] 2017/12/08(金) 12:32:06.89 解析用にparse結果を書き出す関数を作ってみた 問題箇所(=buf->baseURL->hostの設定箇所)は、今の所特定できず こんなことしなくても、正規なデバッグ方法がちゃんと用意されてそうな気も /* w3mソース [proto.h] 末尾に追加 */ extern void clear_mylog(); extern void printf_mylog( char *fmt, ... ); extern void dump_ParsedURL( ParsedURL *p ); /* w3mソース [url.c] 末尾に追加 */ const char fn_mylog[100] = "/tmp/w3m_debug.log"; void clear_mylog(){ FILE *fp =fopen( fn_mylog,"w"); if( fp ) fclose( fp ); } void printf_mylog( char *fmt, ... ){ FILE *fp = fopen( fn_mylog, "a"); if( fp ){ va_list args; va_start( args, fmt ); vfprintf( fp, fmt, args ); va_end( args ); } } void dump_ParsedURL( ParsedURL *p ){ if( p ){ printf_mylog( " host:[%s] file:[%s] real_file:[%s]\n", p->host, p->file, p->real_file ); }else{ printf_mylog( " ParsedURL is null.\n" ); } } http://mevius.5ch.net/test/read.cgi/unix/1185784998/589
590: 580 [sage] 2017/12/08(金) 12:33:40.63 [dump 結果] url.c: baseURL(Buffer *buf){ ... dump_ParsedURL(buf->baseURL); ... } https://mevius.5ch.net/test/read.cgi/unix/1185784998/ へのアクセス時 → host:[mevius.5ch.net] file:[/unix/] real_file:[(null)] http://gihyo.jp/admin/serial/01/ubuntu-recipe/0019 へのアクセス時 → host:[(null)] file:[/] real_file:[(null)] ^^^^ 不具合 http://mevius.5ch.net/test/read.cgi/unix/1185784998/590
592: 580 [sage] 2017/12/08(金) 19:10:52.21 >>591 おお、gihyo.jp も普通に見れるようになってますね 個人的には、 HTMLlineproc2body(Buffer *buf, Str (*feed) (), int llimit) ... case HTML_BASE: ... if( p && p[0]=='/' ) break; /* この一行を追加して、invalidな <base>タグを弾く */ if (!buf->baseURL) で良いかなー、とか検討中だった スキーマの使われ方とかまだ見てないですが、利用した方がベターっぽいですね インライン画像がたまに表示されない気がするけど、気のせいだろか? もうちょっと見てみます http://mevius.5ch.net/test/read.cgi/unix/1185784998/592
594: 580 [sage] 2017/12/09(土) 09:48:30.95 >>591 [file.c] HTMLlineproc2body( ) case HTML_BASE: にて、 base=NULL としてしまうと、サイトの初回訪問時(=画像がキャッシュされていない状態)では、インライン画像が表示されないみたいです ParsedURL *base は、HTMLlineproc2bodya の先頭の方で、バッファの URL によって初期化されてて、NULL にしては駄目っぽい http://mevius.5ch.net/test/read.cgi/unix/1185784998/594
596: 580 [sage] 2017/12/10(日) 12:28:50.09 >>591 オリジナルにこのパッチを当てた時は問題なかったです お騒がせしました(一応報告まで) テスト方法(Linux Mint serena 64bit環境) $ mkdir w3m_test; cd w3m_test $ wget https://downloads.sourceforge.net/w3m/w3m-0.5.3.tar.gz $ wget http://www.linuxfromscratch.org/patches/blfs/svn/w3m-0.5.3-bdwgc72-1.patch $ tar zxvf w3m-0.5.3.tar.gz $ cd w3m-0.5.3 $ patch -Np1 -i ../w3m-0.5.3-bdwgc72-1.patch $ patch -Np1 -i ../wtiNPhJm.txt ## ← >>591 のpatch $ sed -i 's/file_handle/file_foo/' istream.{c,h} $ sed -i 's#gdk-pixbuf-xlib-2.0#& x11#' configure $ sed -i 's#/libexec#/lib#' configure ## ← w3mimg 用に微調整 $ PKG_CONFIG_PATH="/usr/lib/openssl-1.0/pkgconfig:$PKG_CONFIG_PATH" \ LIBS="-lX11 -ldl -lXext -lz" \ ./configure --prefix=/usr --sysconfdir=/etc \ --with-migemo=cmigemo $ make $ rm ~/.w3m/w3mtmp* $ ./w3m -v http://gihyo.jp/admin/serial/01/ubuntu-recipe/0019 $ ./w3m -version w3m version w3m/0.5.3, options lang=en,m17n,image,color,ansi-color,mouse,gpm,menu,cookie,ssl,ssl-verify,external-uri-loader,w3mmailer,nntp,ipv6,alarm,mark,migemo w3mimgは、 Makefile にて、 libexecdir = ${exec_prefix}/lib w3mimgdisplay を /usr/lib/w3m/w3mimgdisplay に配置して確認 参考: ttp://www.linuxfromscratch.org/blfs/view/cvs/basicnet/w3m.html http://mevius.5ch.net/test/read.cgi/unix/1185784998/596
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.018s