You are currently browsing Gustavo Sverzut Barbieri’s articles.
Palavras-chave: C, sprintf, snprintf, asprintf, formatando strings com tamanho variável
Inspirado pelo post do Kojima eu resolvi postar uma dica para um problema similar: normalmente precisamos formatar algum texto usando a função sprintf(), porém ela requer um buffer pré-alocado.
Bem, usar sprintf() é loucura, pois buffer-overflows podem acontecer. Usamos, então, snprintf() que limita o tamanho do resultado. Mas mesmo assim podemos ficar insatisfeitos, pois ele pode sair truncado.
Porém o pessoal do GNU criou a função asprintf() que calcula e aloca a memória necessária para que tudo caiba perfeitamente, incluindo o terminador final. O uso é bem simples:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
char *s;
if (asprintf(&s, "argc=%d", argc) > -1) {
printf("s=\"%s\"\\n", s);
free(s);
}
return 0;
}
Lembre-se de definir _GNU_SOURCE, pois esta é uma extensão ao padrão ANSI C e POSIX. Segundo a man-page, também está disponível em sistemas BSD, vale a pena conferir.
Palavras-chave: Python, internet, http, urllib, urlopen, urlencode
O módulo urllib lhe fornece meios de acessar servidores HTTP por meios de requests GET e POST de maneira direta:
- Acessando o conteúdo da http://codare.net:
import urllib f = urllib.urlopen("http://codare.net") contents = f.read() f.close() print contents - Submetendo parâmetros (query) usando GET:
import urllib params = {"documentation": 1, "forums": 1} query = urllib.urlencode(params) url = "http://wordpress.org/search/codare?%s" % query f = urllib.urlopen(url) contents = f.read() f.close() print contents - Submetendo parâmetros usando POST:
import urllib params = {"keyword": "urllib"} query = urllib.urlencode(params) url = "http://starship.python.net/crew/theller/pyhelp.cgi" f = urllib.urlopen(url, query) contents = f.read() f.close() print contents
Com a página em mãos, você pode utilizar expressões regulares ou algum módulo específico para processar Sgml/HTML/XML para obter seus dados.







Comentários Recentes