Bien que la spécification HTTP indique que les en-têtes ne respectent pas la casse; Paypal, avec sa nouvelle API de paiements adaptatifs, exige que ses en-têtes soient sensibles à la casse. En utilisant l'extension paypal adaptative pour ActiveMerchant (http://github.com/lamp/paypal_adaptive_gateway), il semble que bien que les en-têtes soient définis en majuscules, ils sont envoyés en casse mixte.Préservation des cas dans les en-têtes HTTP avec Ruby's Net: HTTP
Voici le code qui envoie la requête HTTP:
headers = {
"X-PAYPAL-REQUEST-DATA-FORMAT" => "XML",
"X-PAYPAL-RESPONSE-DATA-FORMAT" => "JSON",
"X-PAYPAL-SECURITY-USERID" => @config[:login],
"X-PAYPAL-SECURITY-PASSWORD" => @config[:password],
"X-PAYPAL-SECURITY-SIGNATURE" => @config[:signature],
"X-PAYPAL-APPLICATION-ID" => @config[:appid]
}
build_url action
request = Net::HTTP::Post.new(@url.path)
request.body = @xml
headers.each_pair { |k,v| request[k] = v }
request.content_type = 'text/xml'
proxy = Net::HTTP::Proxy("127.0.0.1", "60723")
server = proxy.new(@url.host, 443)
server.use_ssl = true
server.start { |http| http.request(request) }.body
(i ajouté la ligne proxy afin que je puisse voir ce qui se passait avec Charles - http://www.charlesproxy.com/)
Quand je regarde la demande têtes dans charles, voici ce que je vois:
X-Paypal-Application-Id ...
X-Paypal-Security-Password...
X-Paypal-Security-Signature ...
X-Paypal-Security-Userid ...
X-Paypal-Request-Data-Format XML
X-Paypal-Response-Data-Format JSON
Accept */*
Content-Type text/xml
Content-Length 522
Host svcs.sandbox.paypal.com
J'ai vérifié que ce n'est pas Charles fait la conversion de cas en exécutant une requête similaire en utilisant curl. Dans ce test, le boîtier a été conservé.
ouais, singe-patcher est une option, mais vous auriez à singe-patch beaucoup plus que le [] = méthode ... à tout le moins, [ ] et write_header devraient aussi être corrigés (ce dernier est l'endroit où les en-têtes sont capitalisés lors de la sortie). – emh
Voir la réponse à cette question: http://stackoverflow.com/questions/8864627/how-do-i-preserve-case-with-http-get – codingFoo
Le vrai coupable est Net :: HTTPHeader # capitaliser –