HTTP フォーム (POST を使用) 経由でサイトへのログインを自動化しようとしています。これは私がこれまでに持っているコードです。ログインが成功すると、ユーザーは別のページへの 302 リダイレクトを取得する必要があります。以下のコードは、CURLOPT_NOBODY を false に設定した場合にのみ機能します。このコードはhttps://mytestsite.com/success.jspを出力しますが、 CURLOPT_NOBODY を 1L に設定すると、リダイレクトの前に単に URL を取得します ( https://mytestsite.com/status.html )。どうしてこれなの?
int login()
{
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://mytestsite.com/login.do");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/4.0");
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "/home/cookies.txt");
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/home/cookies.txt");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "loginId=person1@mytestsite.com&password=mypassword");
// Disable output from curl_easy_perform
curl_easy_setopt(curl, CURLOPT_NOBODY, 0L);
res = curl_easy_perform(curl);
char *url;
curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url);
fprintf(stdout, "#####\n");
fprintf(stdout, "%s\n", url);
fprintf(stdout, "#####\n");
curl_easy_cleanup(curl);
return 0;
}