2017-03-10 1 views
1

Ich schicke eine POST-Anforderung über Net als solche:Anforderungs-URI zu lang über POST-Anfrage

http = Net::HTTP.new(mixpanel_endpoint.host, mixpanel_endpoint.port) 
    request = Net::HTTP::Post.new(mixpanel_endpoint.request_uri) 
    http.request(request) 

Das Problem ist, dass die request_uri über die max Grenze. Es ist eine BASE64-codierte Zeichenfolge.

Weiß jemand was zu tun?

<Net::HTTPRequestURITooLong 414 Request URI Too Long readbody=true> 
+0

Erhalten Sie einen Fehler von 'Net' oder dem Endpunkt Sie auch zu versuchen, eine Verbindung? – Kris

+0

hinzugefügt die Fehlermeldung –

+1

Ich denke, der Fehler liegt daran, dass der Endpunkt einen 414 HTTP-Code zurückgibt. – Kris

Antwort

0

Fügen Sie die Daten direkt zur URL hinzu?

Versuchen Sie, die Endpunkt-URL aus den Daten zu trennen. Zum Beispiel:

Net::HTTP::Post.new(request_endpoint, "whatever_param_value=#{base64_encoded_data}") 
1

Net::HTTPRequestURITooLong ist ein 414 HTTP-Code vom Server, müssen Sie die Anfrage ändern, was der Endpunkt erlaubt anzupassen.

10.4.15 414 Request-URI Too Long

Der Server verweigert die Anforderung zu bedienen, weil der Request-URI länger ist als der Server bereit ist, zu interpretieren. Diese seltene Bedingung tritt nur dann auf, wenn ein Client eine Anforderung POST falsch in eine GET-Anfrage mit langen Abfrageinformationen konvertiert hat, wenn der Client in ein URI "schwarzes Loch" der Umleitung abgesunken ist (z. B. ein umgeleiteter URI ) Präfix, das auf ein Suffix von sich selbst zeigt), oder wenn der Server von einem Client angegriffen wird, der versucht, Sicherheitslücken zu nutzen, die in einigen Servern mit Puffern mit fester Länge zum Lesen von oder Manipulieren des Request-URI vorhanden sind.

Referenz: https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html