2016-08-10 3 views
-1

++ C의 URL에 대한 HTTP 응답을 가져 오기/C의 URL ++ AJAX와 같은단순히 HTTP 응답 또는 간단한 패스를 할

뭔가 내가

$.ajax({ 
    url: "http://www.google.com", 
    dataType: "html", 
    timeout: 4 * 1000 
}).done(function() { 

}) 
.fail(function() { 

}); 

자바 스크립트에서 사용하는 호출 실패 절반의 솔루션은 너무 복잡하게 보입니다. 더 쉬운 방법을 찾아서.

+2

['getaddrinfo'] (http://manpages.courier-mta.org/htmlman3/getaddrinfo.3.html)() ['socket'] (HTTP 다음 : //manpages.courier-mta.org/htmlman2/socket.2.html)(), ['connect'] (http://manpages.courier-mta.org/htmlman2/connect.2.html) (), ['write'] (http://manpages.courier-mta.org/htmlman2/write.2.html)() 그리고 마침내 ['read'] (http : //manpages.courier-mta. org/htmlman2/read.2.html)()? –

+0

나는 @SamVarshavchik 더 많은 방법 = 덜 오류, 그리고보다 구체적인에 동의합니다 –

+0

@SamVarshavchik 나는 그 해결책을 내놓은 웹을 수색하는 동안 분명히 예제를 찾지 못했습니다. 나는 그것을 조사 할 것이다 –

답변

0

당신은 CPR 도서관에서보고 할 수 있습니다 :

auto response = cpr::Get // or cpr::Head 
(
    cpr::Url{"http://www.google.com"}, 
    cpr::Header{{"accept", "text/html"}}, 
    cpr::Timeout{4 * 1000} 
); 

if(response.status_code != 200) 
{ 
    // fail 
} 
+0

이것은 내가 찾고있는 간단한 해결책과 같습니다. CPR은 내 프로젝트로 가져와야하는 유일한 라이브러리입니까? –

+0

@DanJamesPalmer'CPR'은 [CURL] (https://curl.haxx.se/)의 "wrapper"라이브러리이므로 [CURL] (https://curl.haxx.se/)도 설치해야합니다. – Galik

+0

신속하게 시작하고 실행하기 위해 cpr은 저장소 내부에 cURL을 하위 모듈로 포함합니다. 시작하는 데 도움이되는 [Usage] (https://github.com/whoshuu/cpr#usage) 섹션의 지침이 있어야합니다. 또한 간단한 GET 요청을하기 위해 필요한 모든 CMake 스캐 폴딩을 사용하여 [예제 저장소] (https://github.com/whoshuu/cpr-example)를 복제하거나 포크 할 수 있습니다. – huu

0

libcurl에서보세요, 예를 들면 : 나는 HappyHTTP 사용하는 경우에

#include <curl/curl.h> 

CURL *c = curl_easy_init(); 
if (!c) 
{ 
    ... 
} 
else 
{ 
    struct curl_slist *headers = curl_slist_append(NULL, "Accept: text/html"); 

    curl_easy_setopt(c, CURLOPT_URL, "http://www.google.com"); 
    curl_easy_setopt(c, CURLOPT_HTTPHEADER, headers); 
    curl_easy_setopt(c, CURLOPT_TIMEOUT, 4 * 1000); 
    curl_easy_setopt(c, CURLOPT_NOBODY, 1); 

    CURLcode res = curl_easy_perform(c); 
    curl_slist_free_all(headers); 

    if (res != CURLE_OK) 
    { 
     ... 
    } 
    else 
    { 
     long responseCode; 
     curl_easy_getinfo(c, CURLINFO_RESPONSE_CODE, &responseCode); 

     ... 
    } 

    curl_easy_cleanup(c); 
} 
0

, 그것은 작고 사용하기 쉬운 이후 . 다소 제한적이지만 필요한 것에 따라 작업을 완료 할 수 있습니다.

// invoked when response headers have been received 
void OnBegin(const happyhttp::Response* r, void* userdata) 
{ 
    *userdata = r->getstatus(); 
} 

// invoked to process response body data (may be called multiple times) 
void OnData(const happyhttp::Response* r, void* userdata, const unsigned char* data, int n) 
{ 

} 

// invoked when response is complete 
void OnComplete(const happyhttp::Response* r, void* userdata) 
{ 

} 


void TestGET() 
{ 
    int returnStatus; 
    happyhttp::Connection conn("www.google.com", 80); 
    conn.setcallbacks(OnBegin, OnData, OnComplete, &returnStatus); 

    conn.request("GET", "/"); 

    while(conn.outstanding()) conn.pump(); 

    if (returnStatus != 200) printf("FAIL"); 
    else printf("OK"); 
} 

는 다음과 같은 게으른 솔루션을 사용할 수 VS2015에서 작동하도록하기 위해서 : 추가

나는 당신에게 당신의 목적을 위해 그것을 사용하는 방법에 대한 아이디어를주고 자신의 예제 프로그램을 조금 변경 다음은 happyhttp.cpp의 시작 부분입니다. 당신에 대해 너무 어려운 찾을 수 있습니까 무엇

#ifdef WIN32 
    #pragma comment(lib, "ws2_32.lib") 
    #define strcasecmp _stricmp 
    #define _WINSOCK_DEPRECATED_NO_WARNINGS 
    #define _CRT_SECURE_NO_WARNINGS 
#endif 
+0

안녕하세요 Alain-Jacques, 귀하의 제안을 구현하려고합니다. HappyHTTP 용 .h 및 .cpp 파일을 다운로드하여 프로젝트에 추가했습니다. 나는 그들을 사용하고 싶은 .cc 파일에 포함 시켰습니다. VS2015에서 컴파일 할 때 다음 오류가 발생합니다. 어떤 아이디어? https : // postimg.org/image/jz0xu87d1/ –

+0

@DanJamesPalmer, VS2015 문제에 대한 답을 편집했습니다. 문제는 컴파일러가 안전하지 않은 문자열 호출 및 사용되지 않는 소켓 함수의 사용에 대해 주로 불평하고 있다는 것입니다. 이것을 해결하는 더 좋은 방법이 있습니다. 예를 들어 snprintf를 sprintf로 교체하는 것입니다. 버퍼의 길이가 메모리 문제를 피할 수 있음을 나타냅니다. –

+0

알랭 자크 (Alain-Jacques)에게 감사드립니다. 실제로 오류를 없앴습니다. 이제 새로운 문제가 생겼습니다. https://postimg.org/image/434d3es11/을 참조하십시오. 나는이 프로젝트를 다른 누군가로부터 인계 받고있다. 모든 방법이 CSpeedTest 우산의 일부 여야합니다. 그 우산 아래에 happyHTTP 메서드를 넣으면 오류가 발생합니다. CSpeedTest를 제거하면 오류가 해결되지만 다른 메소드에서 CheckACM을 호출 할 수 없습니다. –