wtorek, 5 lutego 2008

URL encoded string...

Zaczęło się od niewinnego spojrzenia na to, co przesyłane jest do googli w pasku adresu gdy w polu zapytania wpiszemy coś, co zawiera spacje i polskie znaki... Adresy URL muszą być kodowane w czymś, co jest opisane w RCF 2396. Szybko przejrzałem dokumentację libcurl. Jest tam funkcja curl_easy_escape, która zmieni zwykły ciąg znaków w odpowiendio zakodowany, możliwy do przesłania w adresie URL. Coby lepiej zapamiętać na szybko sobie coś napisałem ;-):


#include <curl/curl.h>


char *kompletny_url(char *zapytanie_url)
{
char poczatek[]={"www.google.pl/search?hl=pl&q="};
char koniec[]={"&btnG=Szukaj+w+Google&lr="};
char *url;
int dlugosc[3],i;

for(dlugosc[0]=0;poczatek[dlugosc[0]];dlugosc[0]++) {};
for(dlugosc[1]=0;zapytanie_url[dlugosc[1]];dlugosc[1]++) {};
for(dlugosc[2]=0;koniec[dlugosc[2]];dlugosc[2]++) {};

url=malloc(dlugosc[0]+dlugosc[1]+dlugosc[2]+1);

if (!url) return NULL;

for(i=0;i<dlugosc[0];i++) url[i]=poczatek[i];
for(i=0;i<dlugosc[1];i++) url[i+dlugosc[0]]=zapytanie_url[i];
for(i=0;i<dlugosc[2];i++) url[i+dlugosc[0]+dlugosc[1]]=koniec[i];

return url;
}

int main(void)
{
CURL *easyint;
CURLcode error;

char zapytanie_normalne[]={"nylonową żyłką"};
char *zapytanie_url,*zapytanie_kompletne;

zapytanie_url=NULL;
zapytanie_kompletne=NULL;

easyint = curl_easy_init();
if(easyint)
{
zapytanie_url=curl_easy_escape(easyint,zapytanie_normalne,0);
if (zapytanie_url) zapytanie_kompletne=kompletny_url(zapytanie_url);
if (zapytanie_kompletne)
{
curl_easy_setopt(easyint, CURLOPT_URL, zapytanie_kompletne);
error = curl_easy_perform(easyint);
}
curl_easy_cleanup(easyint);
}
return 0;
}

Tak swoją drogą to coraz bardziej utwierdzam się w przekonaniu, że nie studiując informatyki trudno się nauczyć pisać "przejrzysty i czytelny" kod...

Brak komentarzy: