2017-05-15 7 views
1

Mon application Rails interroge régulièrement les fichiers ICS des partenaires et parfois elle échoue pour aucune raison. Quand je fais:Obtenir une requête avec curl fonctionne mais Net :: HTTP et OpenURI échouent

curl https://www.airbnb.es/calendar/ical/234892374.ics?s=23412342323 

(params # 's truquées ici)

Je reçois la sortie correspondant au contenu du fichier ICS. Juste l'ouvrir dans le navigateur fonctionne bien aussi.

Quand j'utilise:

Net::HTTP.get(URI(a.ics_link)) 

je reçois une réponse "503 Service temporairement indisponible". J'ai aussi essayé la même chose avec OpenURI avec des résultats similaires.

Pourquoi le serveur traite-t-il différemment les requêtes de curl ou d'un navigateur?

Existe-t-il un moyen pour que Ruby contourne ce problème?

+1

Ce n'est pas une réponse en soi mais je ne pense pas qu'il soit courant d'utiliser Net :: HTTP pour les requêtes d'API dans ruby. J'utilise personnellement https://github.com/httprb/http mais sur cette page, vous pouvez voir d'autres gemmes qui gèrent les requêtes HTTP. – whodini9

+0

Mon code source actuel qui fonctionne le reste du temps (ces fichiers airbnb semblent échouer systématiquement) utilise open-uri. Je suis vraiment juste étonné de savoir pourquoi vous obtiendrez une réponse différente de deux clients http différents. – Vincent

+0

Il se peut que le serveur auquel vous faites une demande fasse une vérification sur un en-tête optionnel que curl ne passe pas, par exemple le referer, le cookie, l'agent utilisateur. Je suppose qu'il ne nécessite pas d'autorisation. – cohart

Répondre

-1

C'est un problème de https ... pas sûr pourquoi, mais passez votre URL dans Ruby à https et cela devrait fonctionner.