HTTP Request
-
.filmor schrieb:
Berufspenner schrieb:
Dafür brauchst du keine extra Bibliothek. Wenn du per Socket eine Anfrage an einen Webserverstellst, dann bekommst du als Antwort ganz automatisch den HTML Quelltext der Seite geliefert. In C wird die Antwort klassischerweise in einen Puffer-Array geschrieben. Du könntest das natürlich auch in einen String schreiben.
Ganz so einfach ist's nicht. Du musst den Server auch noch ganz lieb fragen:
GET /forum HTTP/1.1
Host: www.c-plusplus.netDas war bzw. ist mir schon klar
Natürlich ist da vorher noch einiges zu tun.@edii
Um überhaupt eine Antwort von einem Webserver zu bekommen, musst du ihn vorher erstmal ansprechen und bis du überhaupt dazu kommst wirst du noch einiges in deinem Programm machen müssen. Schließlich musst du ja erstmal eine Verbindung aufbauen, etc. pp. und dafür wirst du an Sockets oder ähnlichem nicht vorbei kommen. Selbst libcurl will noch etwas Vorarbeit.
-
libcurl sieht vernünfigt aus, aber fast schon zu umfangreich.
Im Manual stehen viele Dinge, einfache Programme. Aber wie finde ich heraus, wo steht, wie man den Quelltext einer Seite bekommt?Ich mein, sowas sieht ja toll aus, aber es steht nicht wirklich dabei, was es macht...außer "getinfo".
/***************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * $Id: getinfo.c,v 1.2 2004/11/22 16:24:46 bagder Exp $ */ #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; /* http://curl.haxx.se/libcurl/c/curl_easy_init.html */ curl = curl_easy_init(); if(curl) { /* http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTURL */ curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se"); /* http://curl.haxx.se/libcurl/c/curl_easy_perform.html */ res = curl_easy_perform(curl); if(CURLE_OK == res) { char *ct; /* ask for the content-type */ /* http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html */ res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct); if((CURLE_OK == res) && ct) printf("We received Content-Type: %s\n", ct); } /* always cleanup */ /* http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html */ curl_easy_cleanup(curl); } return 0; }
-
Erwarte hier kein Fastfood. Du musst dich da einarbeiten.
-
sieht wohl so aus.
Danke, wenigstens bin ich schon mal bei cURL, werde das schon herbekommen. CU
-
Standardmäßig schreibt das Ding in stdout, aber hier wird erklärt, wie du das änderst. Deine geforderte Funktion sähe mit libcurl also in etwa so aus:
#include <string> #include <stdexcept> #include <curl/curl.h> namespace { size_t write_to_string (void *buffer, size_t size, size_t nmemb, void *userp) { // möglicherweise auch nmemb statt size, ich mach nicht so viel C ;) std::string result (reinterpret_cast<const char*>(buffer), size); reinterpret_cast<std::string*>(userp)->append(result); return size; } } std::string getquelltext (std::string const& url) { CURL *curl; CURLcode res; std::string out; curl = curl_easy_init(); if (!curl) throw std::runtime_error("CURL kaputt"); curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_to_string); curl_easy_setopt(curl, CURLOPT_WRITEDATA, reinterpret_cast<void*>(&out)); res = curl_easy_perform(curl); if(res != CURLE_OK) throw std::runtime_error("Ne, dat hat nicht geklappt."); curl_easy_cleanup(curl); return out; }/edit: Na toll, Penner, jetzt hast du ihn verscheucht. Und wer soll jetzt meinen Code testen?!
-
.filmor schrieb:
/edit: Na toll, Penner, jetzt hast du ihn verscheucht. Und wer soll jetzt meinen Code testen?!
Tja, das wirst du wohl auch selber machen müssen ;)...mein Gott, warum sind denn hier immer alle so faul und wollen, dass andere ihre Arbeit machen?!

-
keine angst, ich bin noch da...
Schau mir jetzt dein Zeug an, geb auch Rückmeldung wenn ich was hab
-
Unter Windows kann man, der WinAPI sei dank, auch einfach "URLDownloadToFile" aufrufen

-
Mist, ich scheine Linkerfehler zu haben.
Benutze Visual Studio, habe in den Include Ordner den ordner curl reingetan, indem sich curl.h befindet, das sollte passen. Aber wie linke ich richtig in visual studio?Projekt-Eigenschaften-Linker...oder bin ich da falsch?
Meine Fehler sind:
Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__curl_easy_cleanup" in Funktion ""class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl getquelltext(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?getquelltext@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV12@@Z)". main.obj Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__curl_easy_perform" in Funktion ""class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl getquelltext(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?getquelltext@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV12@@Z)". main.obj Fehler 3 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__curl_easy_setopt" in Funktion ""class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl getquelltext(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?getquelltext@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV12@@Z)". main.obj Fehler 4 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__curl_easy_init" in Funktion ""class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl getquelltext(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?getquelltext@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV12@@Z)". main.obj Fehler 5 fatal error LNK1120: 4 nicht aufgelöste externe Verweise. C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\httprequest\Debug\httprequest.exe 1
-
ich muss ja laut Dokumentation
curl-config --libslinken, aber es fragt mich bei Visual Studio nach .lib Dateien...wo trage ich da so eine Zeile ein?
-
-
Badestrand schrieb:
Unter Windows kann man, der WinAPI sei dank, auch einfach "URLDownloadToFile" aufrufen

und unter Linux "wget"
-
Paul Manns schrieb:
und unter Linux "wget"
Nicht nur unter Linux.
-
wgetter schrieb:
Paul Manns schrieb:
und unter Linux "wget"
Nicht nur unter Linux.
sry

-
ich bekomms ums verrecken nicht her, die kack lib dazuzulinken, so eine scheiße.
-
Hast du dir den Link angesehen?
Dort wird's ziemlich genau beschrieben.
-
versuch mal
#pragma comment(lib, "xyz.lib")im Quellcode... Also für xyz.lib natürlich den richtigen Namen...Alternativ wär es auf der linken seite im "Projektmappen-Explorer" nen rechtsklick auf dein Projekt gewesen und dann hinzufügen etc...
bb und gl ; )
-
ja, da wirds ziemlich gut beschrieben.
Allerdings reicht mir ziemlich gut wohl wieder mal nicht:
Ich hab Alles was drin stand gemacht, außer das mit der .proj datei hab ich nicht verstanden. Die lib hab ich heruntergeladen, aber da steht nur "im Linker dazulinken", was ich nicht verstehe.
Folgende Errors hab ich momentan.
Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__CrtDbgReportW" in Funktion ""public: char const & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::operator[](unsigned int)const " (??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z)". main.obj Fehler 3 error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW". libcpmtd.lib Fehler 4 error LNK2001: Nicht aufgelöstes externes Symbol "__CrtDbgReportW". libcpmtd.lib Fehler 5 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__WSACleanup@0" in Funktion "_win32_cleanup". curllib.lib Fehler 6 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSACleanup@0". curllib.lib Fehler 7 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__WSAStartup@8" in Funktion "_win32_init". curllib.lib Fehler 8 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAStartup@8". curllib.lib Fehler 9 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__closesocket@4". curllib.lib Fehler 10 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__closesocket@4". curllib.lib Fehler 11 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__closesocket@4". curllib.lib Fehler 12 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__closesocket@4" in Funktion "_conn_free". curllib.lib Fehler 13 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__closesocket@4". curllib.lib Fehler 14 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__closesocket@4". curllib.lib Fehler 15 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__closesocket@4". curllib.lib Fehler 16 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0". curllib.lib Fehler 17 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0" in Funktion "_ftp_state_use_port". curllib.lib Fehler 18 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0". curllib.lib Fehler 19 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0". curllib.lib Fehler 20 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0". curllib.lib Fehler 21 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0". curllib.lib Fehler 22 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0". curllib.lib Fehler 23 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0". curllib.lib Fehler 24 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__recv@16" in Funktion "_Curl_getinfo". curllib.lib Fehler 25 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__recv@16". curllib.lib Fehler 26 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__inet_ntoa@4" in Funktion "_inet_ntop4". curllib.lib Fehler 27 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__htons@4" in Funktion "_Curl_he2ai". curllib.lib Fehler 28 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__htons@4". curllib.lib Fehler 29 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__htons@4". curllib.lib Fehler 30 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__gethostbyname@4" in Funktion "_gethostbyname_thread@4". curllib.lib Fehler 31 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__WSASetLastError@4" in Funktion "_gethostbyname_thread@4". curllib.lib Fehler 32 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSASetLastError@4". curllib.lib Fehler 33 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__socket@12" in Funktion "_init_resolve_thread". curllib.lib Fehler 34 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__socket@12". curllib.lib Fehler 35 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__socket@12". curllib.lib Fehler 36 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__inet_addr@4" in Funktion "_Curl_getaddrinfo". curllib.lib Fehler 37 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__inet_addr@4". curllib.lib Fehler 38 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__inet_addr@4". curllib.lib Fehler 39 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "___WSAFDIsSet@8" in Funktion "_Curl_socket_ready". curllib.lib Fehler 40 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__select@20" in Funktion "_Curl_socket_ready". curllib.lib Fehler 41 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ntohs@4" in Funktion "_Curl_SOCKS4". curllib.lib Fehler 42 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__ntohs@4". curllib.lib Fehler 43 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__ntohs@4". curllib.lib Fehler 44 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__send@16" in Funktion "_Curl_plain_send". curllib.lib Fehler 45 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__send@16". curllib.lib Fehler 46 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ioctlsocket@12" in Funktion "_Curl_nonblock". curllib.lib Fehler 47 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__getsockname@12" in Funktion "_bindlocal". curllib.lib Fehler 48 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__getsockname@12". curllib.lib Fehler 49 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__bind@12" in Funktion "_bindlocal". curllib.lib Fehler 50 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__bind@12". curllib.lib Fehler 51 error LNK2001: Nicht aufgelöstes externes Symbol "__imp__bind@12". curllib.lib Fehler 52 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__getsockopt@20" in Funktion "_verifyconnect". curllib.lib Fehler 53 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__setsockopt@20" in Funktion "_tcpnodelay". curllib.lib Fehler 54 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__getprotobyname@4" in Funktion "_tcpnodelay". curllib.lib Fehler 55 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__connect@12" in Funktion "_singleipconnect". curllib.lib Fehler 56 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__timeGetTime@0" in Funktion "_gettimeofday". curllib.lib Fehler 57 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__accept@12" in Funktion "_AllowServerConnect". curllib.lib Fehler 58 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__listen@8" in Funktion "_ftp_state_use_port". curllib.lib Fehler 59 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__sendto@24" in Funktion "_tftp_rx". curllib.lib Fehler 60 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__recvfrom@24" in Funktion "_Curl_tftp". curllib.lib Fehler 61 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__malloc_dbg" in Funktion ""void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)". libcpmtd.lib Fehler 62 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__free_dbg" in Funktion ""void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)". libcpmtd.lib Fehler 63 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__calloc_dbg" in Funktion "__Getctype". libcpmtd.lib Fehler 64 fatal error LNK1120: 31 nicht aufgelöste externe Verweise. C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio 2005\Projects\httprequest\Debug\httprequest.exe
-
In the linker section add curllib.lib, ws2_32.lib, winmm.lib
sprich: in deinen compileroptionen.
-
edii schrieb:
ich bekomms ums verrecken nicht her, die kack lib dazuzulinken, so eine scheiße.
Mir geht es ähnlich.
Erhalte auch:
https.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__curl_easy_cleanup
https.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__curl_easy_perform
https.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__curl_easy_setopt
https.obj : error LNK2001: Nichtaufgeloestes externes Symbol __imp__curl_easy_initHabe schon #pragma comment(lib,"curllib.lib")
und #define CURL_STATICLIB usw.
ausprobiert und bei den Projekteinstellungen curllib.lib ws2_32.lib winmm.lib addiert, aber es will einfach nicht