içerik göndermek için boşluk ekleyerek cURL?

4 Cevap php

Ben cURL PHP 5.2 kullanan bir satıcının sunucusuna karşı POST çalışılıyor. Ben kendi sunucusunda ve daha sonra bir tepki olarak okumaya karşı göndermek için bir XML belgesinde okuyorum:

$request = trim(file_get_contents('test.xml'));
$curlHandle = curl_init($servletURL);
curl_setopt($curlHandle, CURLOPT_POST, TRUE);
curl_setopt($curlHandle, CURLOPT_POSTFIELDS, array('XML'=>$request));
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curlHandle, CURLOPT_HEADER, FALSE);  # Have also tried leaving this out
$response = curl_exec($curlHandle);

Kendisi bir bu kod, Tamam çalışır, ancak diğer sunucu belirterek bu XML çözümleyici bir yanıt verir:

İçerik önbölükün değil

Ben bu hata yukarı baktı ve bu normalde XML önce boşluklarla neden olur, ama ben XML dosyası kendisi hiçbir boşluk ve trim () zaten o kadar açık olmalıdır olduğundan emin yaptı. Ben kodu koştu ederken bağlantıda bir TCPdump'ı yaptım ve bu gönderilir budur:

POST {serverURL} HTTP/1.1
Host: {ip of server}:8080
Accept: */*
Content-Length: 921
Expect: 100-continue
Content-Type: multipart/form-data; boundry:---------------------------01e7cda3896f

---------------------------01e7cda3896f
Content-Disposition: form-data; name="XML"

[SNIP - the XML was displayed]

---------------------------01e7cda3896f--

Öncesi ve ben Ethereal olarak oturumu tekrar ne zaman [SNIP] satırdan sonra görünür boşluk var. Bu ne öyleyse, onu nasıl kaldırabilir, ya da ben çok arıyorum ve bu ben karşı ilanıyla sunucusu ile ilgili bir sorun olabilir, soruna neden mi?

4 Cevap

Bu bir kodlama mesele çıkıyor. App görünüşte yüzden değiştirmek zorunda kaldım yerine form-data www-form-urlencoded olarak XML gerekir:

# This sets the encoding karşı multipart/form-data
curl_sekarşıpt($curlHandle, CURLOPT_POSTFIELDS, array('XML'=>$request));

karşı

# This sets it karşı application/x-www-form-urlencoded
curl_sekarşıpt($curlHandle, CURLOPT_POSTFIELDS, 'XML=' . urlencode($request));

Bir cevap değil, ama ben kod bakarken incelemek için bütün fopen / fclose / fread şey çok sıkıcı buluyorum.

Siz değiştirebilirsiniz:

$file = 'test.xml';
$fileHandle = fopen($file, 'r');
$request = fread($fileHandle, filesize($file));
fclose($fileHandle);
$request = trim($request);

Ile:

$request = trim(file_get_contents('test.xml'));

Ama yine de - Sorunuzun; Bu gönderiliyor başlıkları ise, o zaman uzak sunucuda bir sorun olmamalı. () Kesin çıkış kontrol etmek için xml dosyasının içeriğini değiştirerek ve var_dump kullanmayı deneyin (dize uzunluğu da dahil olmak üzere, bu yüzden şeyler eksik bakabilirsiniz)

Umut olur

Ben bir 'wc-m test.xml' yaptı ve 743 XML dosyasında karakter ve $ istek üzerine var_dump yüzden bir şey (I varsayıyorum)) (trim elimden oluyor 742 karakter ile geri geliyor ile geri geldi.

Ben yaptım:

print "=====" . $request . "=====";

ve başlangıç ​​ve XML izmaritleri sonuna doğru yukarı hiçbir beyaz boşluk ===== agains.

Çıkış this answer to another question - Sana benzer bir soru vardı ve bu bana yardımcı oldu bulundu.