質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Q&A

2回答

3773閲覧

HTTPリクエストからPOSTのパラメータを表示させたい

Subaru

総合スコア15

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

0グッド

0クリップ

投稿2015/05/20 09:48

HTTPリクエストのPOSTメソッドで送られてきたパラメータを変数に入れて表示させたいです
HTTPリクエストはすべて表示させられたのですが、思った通りにvalue=4を変数に入れられません
どうしたらいいのでしょうか?

lang

1POST /test.cgi HTTP/1.1 2Host: localhost:8000 3Connection: keep-alive 4Content-Length: 7 5Cache-Control: max-age=0 6Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 7Origin: http://localhost:8000 8User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 9Content-Type: application/x-www-form-urlencoded 10Referer: http://localhost:8000/index.html 11Accept-Encoding: gzip, deflate 12Accept-Language: ja,en-US;q=0.8,en;q=0.6 13 14value=4

下のコードでbuf3にvalue=4が入ると思うのですがうまくいきません

lang

1char *buf1;//HTTPリクエスト 2char *buf2;// 3char *buf3; 4 5buf2 = strtok(buf1, "\n"); 6fprintf(stderr, "%s\n",buf2); 7buf3 = strtok(NULL, "\n"); 8fprintf(stderr, "%s\n",buf3);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

1回目のstrstrの引数に、¥n¥nを指定しないと、1行づつ取得されちゃいます。

投稿2015/05/22 11:56

kurosawa

総合スコア780

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurosawa

2015/05/26 09:34

前回詳細を記載できなかったので、再投稿。 下記で、buf2 に "value=4" が格納されないでしょうか? char *buf1;//HTTPリクエスト char *buf2; buf2 = strtok(buf1, "\n\n"); // ¥n¥nと改行を2回で設定 fprintf(stderr, "%s\n",buf2);
guest

0

HTTPリクエストが取得できているというのは、ご質問に記載されているPOST~value=4までの文字列がすべて取得できているという意味でしょうか?

できればbuf1,buf2,buf3それぞれにどういう文字列が入ったかを示していただけると、より詳しいアドバイスが集まると思います。

strtokで文字列を区切っているので、単純に区切り文字の勘定間違いが考えられます。現在取得できている文字列が判れば原因も突き止めやすいと思います。

投稿2015/05/21 03:20

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Subaru

2015/05/21 03:27

buf1には、POSTからvalue=4まですべて取得できています buf2には、POST /test.cgi HTTP/1.1 buf3には、Connection: keep-alive が入っていました これをやっていけばいつかはvalue=4がはいったポインタ配列を受け取れるのですが 一気に取得しようと思っているのですがどうすればいいのかわからない状態です
KoichiSugiyama

2015/05/21 05:12

割とベタな方法ですが char *buf1;//HTTPリクエスト char *buf2; buf2 = strtok(buf1, "\n"); while (buf2 != NULL) { if (strstr(buf2, "value") != NULL) { break; } buf2 = strtok(NULL, "\n"); } if (buf2 == NULL) { /* "value"が見つからなかった */ return [なにがしかのエラーコード]; } こんな感じでどうでしょう。 切り取った文字列に対してstrstr()関数で"value"が含まれるかどうか判定します。 ループを抜けてきたbuf2がNULLでなければ"value"を含む文字列を示している、という処理です。
kurosawa

2015/05/22 11:55

1回目のstrstrの引数に、¥n¥nを指定しないと、1行づつ取得されちゃいます。
kurosawa

2015/05/22 11:57

ごめんなさい。 間違って、こちらのコメントとして投稿してしまいました。 本当にごめんなさい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問