PHP ile kaçan CURL @ sembolü

4 Cevap php

Ben bir iContact e-posta listesine kaydolmak için kıvırmak verileri üzerinden gönderen bir php uygulama yazıyorum. Ancak geçersiz e-posta adresi hatası alıyorum. Ben bu nedeniyle yerine @ arasında% 40 gibi görünüyor ben @ sembolü kaçan olduğumu aslında olabilir düşünüyorum. Ayrıca, CURLOPT_POSTFIELDS ile curl_setopt için php belgelerine göre:

The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path.

Yani, ilk urlencode yoluyla çalıştırarak olmadan php curl ile post veri olarak @ sembolü geçmek için yine de var mı?

4 Cevap

Kullanım http_build_query() on your data-array first before passing it to curl_setopt(), o application/x-www-form-encoded yerine multipart/form-data (ve dolayısıyla @ yorumlanmaz) halinde formu gönderen yol açacaktır .

Ayrıca neden Eğer gerçekten bir e-posta adresi @ umurumda mı? @ Ortada bir yerde ilk karakter, değilse sadece önemli.

Arama PHP kıvırmak kılavuzda sonra, ben ilk kaçmak için bir bilgi yoktur buldum '@' sonrası alan bir dosya yerine bir dize if multipart / form-data kodlaması ile yazılan.

Ben bu sorunu çalıştı yolu metnin başında boş bir önek almaktadır. Bizim arka uç API boşlukları şerit olsa bu yüzden boş kaldırmak ve özgün metni geri verebilir. Ben hava Twitter API kullanıcı girişi boşlukları kırpmak bilmiyorum.

Eğer öyleyse, bu geçici çözüm de sizin için çalışıyor.

Multipart / form-data kodlaması ile PHP kıvrılmasını kullanırken herhangi bir ilk kaçan '@' yolunu bulduysanız, lütfen bize bildirin.

Ben aynı sorunu koştum, ama kıvrılma kendisi ve PHP curl ile.

'-F' kıvırmak saha seçeneğini kullanırken bir lider @ sembolü POST gönderilir olmayacak ama yerine hemen POST parçası olarak sembolü başarılı dosya adını göndermek için kıvırmak talimat verir.

Neyse ki, kıvırmak 'form-string' seçeneği ayrıştırılmaz olması dışında, '-F' olarak aynı şekilde davranır ki, '--form-string' başka bir seçenek sunar.

Eğer dosya "testfile.txt" ile değer "@ değeri" ve dosya1 ile alan1 POST kıvırmak kullanmak istiyorsanız aşağıdaki gibi bir örnek olarak, bunu yapabilirsiniz:

curl "http://www.url.com" --form-string "field1=@value" -F "file1=@testfile.txt"

@ PatricDaryll cevabı doğru, ama ben bu http_build_query işlevini kullanmak için anlamak için araştırmalar biraz yapmak gerekiyordu.

Netleştirmek ve yerine yapma, özetlemek için:

     curl_setopt($ch, CURLOPT_POSTFIELDS, $array);

Kullanacağınız:

     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($array));

Basit ama kafa karıştırıcı ... kıvırmak ona bir dize ya da bir dizi verdi olmadığını anlamak için yeterince akıllı.