O que fazer quando você precisa usar uma API de terceiros e tudo funciona bem quando você está fazendo seus testes com curl.
$ curl https://api.github.com/repos/lorn/lwp-curl/commits
Mas quando você vai para sua linguagem botar a mão na massa, dá erro:
$ curl "https://api.github.com/repos1/lorn/lwp-curl/commits1"
{
"message": "Not Found"
}
é claro que nem sempre o erro será tão claro, e principalmente quando você está fazendo POST/PUT com arquivos, como debugar? porque funciona no curl e não funciona na minha linguagem preferida?
Netcat for the rescue!
Netcat é o canivete suiço do mundo unix, se você nunca ouviu falar e quer aprender até a transferir arquivos via Netcat (!!) veja esse post do pkrumins nesse caso especifico, vamos usar Netcat para debugar requisições HTTP e isso ele não mostra lá ;)
Essa requisição do curl:
$ curl "localhost:9999/repos/lorn/lwp-curl/commits"
Aparece assim no Netcat
$ nc -l localhost 9999
GET /repos/lorn/lwp-curl/commits HTTP/1.1
User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
Host: localhost:9999
Accept: */*
Agora ao invés de usar o curl, faça sua aplicação fazer o POST/PUT para o Netcat - localhost:9999 nesse exemplo - e veja a diferença entre o ‘debug’ do nc, para quando a requisição vem do curl, e o ‘debug’ do nc para quando a requisição vem da sua aplicação, no meu caso eu tinha esquecido de enviar o arquivo usando HTTP Multipart.
Para usar o Netcat no Mac/BSD:
$ nc -l localhost 9999
Linux:
nc -l -p 9999