httpsサポートが必要な場合は、libcurlを使用することをお勧めします。 libcurlはプロキシを介してhttpsとhttpをサポートし、プロキシはhttpsをサポートします。サポートプロキシが必要な場合は、HTTP_PROXY環境変数のみを設定する必要があります。
Curlは、バッファにデータを書き込むためのfwriteのようなコールバックを提供します。
#include <curl/curl.h>
typedef struct {
char* data; // response data from server
size_t size; // response size of data
} MEMFILE;
MEMFILE*
memfopen() {
MEMFILE* mf = (MEMFILE*) malloc(sizeof(MEMFILE));
if (mf) {
mf->data = NULL;
mf->size = 0;
}
return mf;
}
void
memfclose(MEMFILE* mf) {
if (mf->data) free(mf->data);
free(mf);
}
size_t
memfwrite(char* ptr, size_t size, size_t nmemb, void* stream) {
MEMFILE* mf = (MEMFILE*) stream;
int block = size * nmemb;
if (!mf) return block; // through
if (!mf->data)
mf->data = (char*) malloc(block);
else
mf->data = (char*) realloc(mf->data, mf->size + block);
if (mf->data) {
memcpy(mf->data + mf->size, ptr, block);
mf->size += block;
}
return block;
}
char*
memfstrdup(MEMFILE* mf) {
char* buf;
if (mf->size == 0) return NULL;
buf = (char*) malloc(mf->size + 1);
memcpy(buf, mf->data, mf->size);
buf[mf->size] = 0;
return buf;
}
int main() {
CURL* curl;
MEMFILE* mf;
char* ptr;
mf = memfopen();
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://github.com");
curl_easy_setopt(curl, CURLOPT_WRITEDATA, mf);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, memfwrite);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_perform(curl);
curl_easy_cleanup(curl);
ptr = memfstrdup(mf);
printf("%s\n", ptr);
free(ptr);
memfclose(mf);
}
ありがとうございます。別の言い方をすれば、仲間のエンジニアが*最も軽い*ネットワーキングライブラリを尋ねると、彼は何を指していると思いますか?私はそれがメモリの足跡やパフォーマンスかもしれないと思った。 –
@ジャマール:一般的に、私はバイナリサイズを考えます。 –