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

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

ただいまの
回答率

89.21%

libcurl:リクエストヘッダを変数で渡したい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 257

Ykkykk

score 111

libcurlを使用してC言語でHTTPリクエストをしようとしています。
下記のようにリクエストヘッダをCURLに渡したところ、うまく認識してくれないようです。

#include <stdio.h>
#include <curl/curl.h>


int main()
{
        CURL *curl = curl_easy_init();

        struct curl_slist *list = NULL;

        if(curl) {
          curl_easy_setopt(curl, CURLOPT_URL, "https://hogehoge.com");

      char header[] = "Content-Type: application/json";
          list = curl_slist_append(list, header);

          curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);

          curl_easy_perform(curl);

          curl_slist_free_all(list); /* free the list again */
        }
}


上記のヘッダを渡す部分で直接文字列を打ち込めば認識されるのですが、変数を渡すと認識されません。
どのようにすればヘッダを変数に収めたとしても認識されるのでしょうか?
ご教示いただけますと幸いです。よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • dodox86

    2019/12/03 18:31

    > 上記のヘッダを渡す部分で直接文字列を打ち込めば認識されるのですが、変数を渡すと認識されません。
    とありますが、ご提示のコードのどの部分で、どう、直接文字列を入れればOKで、どう変数を使うとNGなのか。分かりません。
    (結局、ご提示のコードはOKなのでしょうか?それともNGなのですか?)

    キャンセル

  • Ykkykk

    2019/12/03 18:41

    上記のコードではNGです。
    リクエストヘッダの部分が上記のコードでは変数に収めていますが、curl_slist_append(list, "Content-type: application/json");のように直接文字列を打ち込むと認識されます。
    説明不足で申し訳ありません。。。

    キャンセル

  • dodox86

    2019/12/03 19:15

    「認識されない」というのは誰が(サーバー?)認識していないのでしょうか。C言語的には、curl_slist_appendの第2引数として見た場合、
    char header[] = "Content-Type: application/json";
    list = curl_slist_append(list, header);

    list = curl_slist_append(list, "Content-Type: application/json");
    もどちらも同じです。現に、"http://localhost:8000" 宛てで試してみましたが、
    $ nc -l 8000
    GET / HTTP/1.1
    Host: localhost:8000
    Accept: */*
    Content-Type: application/json

    のようにHTTPヘッダー中に入りました。(httpsでは試せていませんが)

    キャンセル

  • Ykkykk

    2019/12/04 09:01

    試していただいたようにC言語的に認識されません。
    わたしの環境ではお試しいただいたような形で、変数に収めた場合はヘッダが反映されないのです。

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 89.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる