Estou postando dados em uma API externa (usando PHP, se for relevante).
Devo codificar por URL as variáveis POST que eu passo?
Ou preciso codificar dados GET apenas por URL?
Obrigado!
UPDATE: Este é o meu PHP, caso seja relevante:
$fields = array(
'mediaupload'=>$file_field,
'username'=>urlencode($_POST["username"]),
'password'=>urlencode($_POST["password"]),
'latitude'=>urlencode($_POST["latitude"]),
'longitude'=>urlencode($_POST["longitude"]),
'datetime'=>urlencode($_POST["datetime"]),
'category'=>urlencode($_POST["category"]),
'metacategory'=>urlencode($_POST["metacategory"]),
'caption'=>($_POST["description"])
);
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
Respostas:
Resposta Geral
A resposta geral para sua pergunta é que depende. E você decide, especificando qual é o seu "Tipo de Conteúdo" nos cabeçalhos HTTP.
Um valor de "application / x-www-form-urlencoded" significa que seu corpo do POST precisará ser codificado em URL como uma sequência de parâmetros GET. Um valor "multipart / form-data" significa que você usará delimitadores de conteúdo e NÃO codificará o URL.
Esta resposta tem uma explicação muito mais completa se você quiser obter mais informações.
Resposta específica
Para uma resposta específica para as bibliotecas PHP que você está usando (CURL), você deve ler a documentação aqui .
Aqui estão as informações relevantes:
fonte
O @DougW respondeu claramente a essa pergunta, mas ainda gosto de adicionar alguns códigos aqui para explicar os pontos de Doug. (E corrija erros no código acima)
Solução 1: codifique por URL os dados do POST com um cabeçalho do tipo de conteúdo: application / x-www-form-urlencoded.
Nota: você não precisa urlencode os campos $ _POST [] um por um, a função http_build_query () pode executar bem o trabalho de codificação de URL.
Solução 2: passe a matriz diretamente como dados de postagem sem codificação de URL, enquanto o cabeçalho Content-Type será definido como multipart / form-data.
Ambos os trechos de código funcionam, mas usando diferentes cabeçalhos e corpos HTTP.
fonte
O curl codificará os dados para você, basta soltar os dados brutos do campo na matriz de campos e dizer para "ir".
fonte
As postagens acima respondem a perguntas relacionadas à codificação de URL e como ele funciona, mas as perguntas originais eram "Devo codificar por URL os dados do POST?" que não é respondido.
Da minha experiência recente com a codificação de URL, gostaria de estender ainda mais a questão. "Devo codificar por URL os dados POST, o mesmo que o método GET HTTP. Geralmente, os formulários HTML no navegador se forem preenchidos, enviados e / ou GET algumas informações, os navegadores farão a codificação de URL, mas se um aplicativo expuser um serviço da Web e esperar Os consumidores fazem a codificação de URL nos dados. É arquitetônico e tecnicamente correto fazer a codificação de URL com o método HTTP POST? "
fonte