2011-07-30 17 views
6

Bir defaultHttpClient aracılığıyla birden çok HTTP isteği gönderiyorum. Sorun, "Host" başlığının istekte asla ayarlanmamış olmasıdır.Java - DefaultHttpClient ve "Host" üstbilgisi [Apache HttpComponent]

Host: myapp.com 

Herhangi ipuçları:

HttpUriRequest request = new HttpGet("http://www.myapp.com"); 
org.apache.http.client.HttpClient client = new DefaultHttpClient(); 
HttpResponse httpResponse = client.execute(request); 

oluşturulan istek nesne değeri ile zorunlu "Host" başlığı ayarlamak değildir: Aşağıdaki GET isteği yürüterek Örneğin?

cevap

8

Benim hatam. Aslında, DefaultHttpClient, HTTP belirtiminin gerektirdiği gibi Host başlığını ekler.

Sorunum, daha önce eklediğim bir başka özel başlık nedeniyle "\r\n" ile bitti. Bu, DefaultHttpClient tarafından otomatik olarak eklenen tüm sonraki başlıkları geçersiz hale getirdi. HTTP isteğinde aşağıdaki Üstbilgi dizisi oluşturulur

HttpUriRequest request = new HttpGet("http://www.myapp.com"); 
org.apache.http.client.HttpClient client = new DefaultHttpClient(); 
request.addHeader(new BasicHeader("X-Custom-Header", "Some Value\r\n"); 
HttpResponse httpResponse = client.execute(request); 

:

GET /index.html HTTP/1.1 
X-Custom-Header: Some value 

Host: www.example.com 

alan X-Custom-Header ile HostHost başlık geçersiz gibi bir şey yapıyordu. üretir

HttpUriRequest request = new HttpGet("http://www.myapp.com"); 
org.apache.http.client.HttpClient client = new DefaultHttpClient(); 
request.addHeader(new BasicHeader("X-Custom-Header", "Some Value"); 
HttpResponse httpResponse = client.execute(request); 

:

GET /index.html HTTP/1.1 
X-Custom-Header: Some value 
Host: www.example.com 
+1

İyi yakalama! Benim durumumda (Android'de) Base64, hat terminatörlerini içeren ['Base64.DEFAULT'] (http://developer.android.com/reference/android/util/Base64.html#DEFAULT) ile bir başlık değerini kodluyordum. . Sonuç olarak, özel üstbilgiden sonra gelen tüm anahtar/değer çiftleri dağıldı (isteği bir vekil aracılığıyla çalıştırırken bile göremediler). ['Base64.NO_WRAP']' a geçmek (http://developer.android.com/reference/android/util/Base64.html#NO_WRAP) sorunumu çözdü, çünkü tüm hat sonlandırıcılar (yani, bir uzun çizgi). –

1

Ana makine üstbilgisini istek üzerine addHeader kullanarak ayarlayın.

+0

Büyük cevap ile düzeltildi. Host için özel bir değer ayarlayabildim ve http://djce.org.uk/dumprequest adresine giderek çalıştığını teyit ettim. Bu sayfa aldığı üstbilgileri geri döker ve yeterince emin, 'Host' değerine ayarladığım şey ("djce.org.uk" değil, Host değeri değiştirilmemişse ne olur?) . –