68user's page 掲示板

Prev< No. 565〜568> Next  [最新発言に戻る] [過去ログ一覧]
No. 565 # 68user 1999/11/29 (月) 22:46
> HTTPバージョンを省略した場合は HTTP/1.1とみなされるみたいです。
省略すると HTTP/0.9 になります。0.9 では GET 以外使えませんし、
ヘッダも送れません。例えば
    GET /~foo/index.html
を送った時点で、サーバからレスポンスが返ってきます。なので、

> 途中の\r\nにHTTPDが反応してしまうようです。
これはそういうことじゃないでしょうか?

なお、HTTP 0.9 で
    POST /~foo/index.html
などとしようとすると、405 Method Not Allowed になるはずです。

No. 566 # 68user 1999/11/29 (月) 23:33
というわけで、
> $sendとか、適当な変数に全部繋げて代入し、
> print SOCKET $send; としなければならない
ということはあり得ないと思いますが、一応試してみたいので
よろしければその掲示板の URL を教えて下さい。

No. 567 # GAT 1999/11/30 (火) 07:38
おはようございます。

ネットワークプログラミングの基礎知識の
C言語でHTTPクライアントを作ってみよう(2)
ではperlと違いヘッダ部分が表示されてますよね?
あれを本体部だけ表示するようにするにはどうしたらいいんでしょう?
色々やってみましたがどうも上手くいかなくて…
「UNIXの場合」はfgets関数をソケット読み出しにも使えますけど
某Windowsは勝手が違うんです。。
# どーみてもUNIXの方がやりやすい
どんな感じかというのがhttp://www.nakka.com/inet/httpc.html
赤系の色で
「/* サーバからデータを受信する処理 */」
とか書かれてる辺りです。
なんとなく見るとやりにくいのがわかるかと^^;;
どうすればいいでしょうか?
思いついたのでいいですからレスください。
どうもアイデアが・・・・

No. 568 # 68user 1999/11/30 (火) 14:25
    while (1){
        char buf[BUF_LEN];
        int read_size;
        static int body_flg = 0;
        char *p;

        read_size = read(s,buf,BUF_LEN);
        if ( read_size > 0 ){
            if ( body_flg ){
                p = buf;
            } else if ( p = strstr(buf,"\r\n\r\n") ){ /* 空行はあるか? */
                p+=4; /* \r\n\r\n の分先に進める */
                read_size -= p-buf; /* サイズ調整 */
                body_flg = 1;
            }
            if ( body_flg ){
                write(1,p,read_size);
            }
        } else {
            break;
        }
    }
こんな感じでどうでしょうか?

Prev< No. 565〜568> Next  [最新発言に戻る] [過去ログ一覧]