Soru HttpURLConnection, httpCon.setRequestMethod (“GET”) olsa bile bir POST isteği gönderir; ayarlandı


İşte kodum:

String addr = "http://172.26.41.18:8080/domain/list";

URL url = new URL(addr);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setUseCaches(false);
httpCon.setAllowUserInteraction(false);
httpCon.setRequestMethod("GET");
httpCon.addRequestProperty("Authorization", "Basic YWRtaW4fYFgjkl5463");

httpCon.connect();

OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream());

System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());

out.close();

Cevap olarak gördüğüm şey:

500 Sunucu hatası

Aç ben httpCon var ve ne görüyorum:

POST / rest / platform / etki alanı / liste HTTP / 1.1

Kullanmış olmama rağmen neden POST olarak ayarlandı? httpCon.setRequestMethod("GET"); onu GET olarak ayarlamak için?


25
2018-01-06 15:19


Menşei


Temel kimlik doğrulaması POST üzerinden tel üzerinden mi geliyor? - cdeszaq
Galaxy Nexus üzerinde test mi ediyordun? httpCon.setDoOutput(true); Galaxy Nexus'ımda POST'u zorladım ama Gingerbread'ı çalıştıran Galaxy S2'de değil. - dzeikei


Cevaplar:


httpCon.setDoOutput(true); istek yöntemini POST olarak örtülü olarak ayarlayın çünkü istek gövdesi göndermek istediğinizde varsayılan yöntem budur.

GET’i kullanmak isterseniz, o satırı kaldırın ve OutputStreamWriter out = new OutputStreamWriter(httpCon.getOutputStream()); hat. GET istekleri için bir istek gövdesi göndermeniz gerekmez.

Basit bir GET talebi için aşağıdakiler yapılmalıdır:

String addr = "http://172.26.41.18:8080/domain/list";
URL url = new URL(addr);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setUseCaches(false);
httpCon.setAllowUserInteraction(false);
httpCon.addRequestProperty("Authorization", "Basic YWRtaW4fYFgjkl5463");
System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());

Ayrıca bakınız:


ilgisiz somut soruna, sizin parola kısmına Authorization Üstbilgi değeri düzgün olarak Base64 kodlu görünmüyor. Belki de bu durum çok karışıktı, çünkü örnek oldu, ama olmasaydı bile Base64 kodlama yaklaşımını düzeltirdim.


53
2018-01-06 15:21



AFAIK, REST, GET'in bir istek organına sahip olmamasını ve belki de bir organla ilgili yasal taleplerde bulunmasını emretmez. - mirage
@mirage: Bu REST tarafından belirtilmemiş ve sadece göz ardı edilecek. Yalnızca kötü uygulanan sunucular / API'ler bunu gerektirebilir. Bu asla güvenilmemelidir. - BalusC
ama bunun yasak olduğu anlamına mı geliyor? Yani, HttpURLConnection GET'in vücutlarla kullanımını yasaklıyor gibi görünüyor, ama bu standart dışı mı? Kullanmasına izin veren birçok kütüphane var. - mirage
@BalusC Java kaynak kodunda herhangi bir kanıt bulunamadı. httpCon.setDoOutput(true); yöntemi POST olarak ayarlar. - Artem Novikov
@ArtemNovikov: grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/... - BalusC