En passant cookies dans NodeJs requête http
Je suis un peu un novice en NodeJs. Je suis en train de faire une requête http et de passer un témoin. J'ai lu tous les fils sur stackoverflow à ce sujet et constituée d'un bout de code qui devrait fonctionner en théorie. Mais, il ne le fait pas.
Ce que j'essaie de faire c'est d'envoyer un cookie avec le code du magasin pour une boutique en ligne qui va me montrer les informations au sujet de cette boutique. Si il n'y a pas de témoin, celui-ci indique la valeur par défaut div
demandant de choisir un magasin.
Voici mon code:
var request = require('request'),
http = require('follow-redirects').http,
request = request.defaults({
jar: true
});
var cookieString = 'MC_STORE_ID=66860; expires=' + new Date(new Date().getTime() + 86409000);
var str = '';
//var uri = 'example.de';
//var j = request.jar();
var cookie = request.cookie(cookieString);
j.setCookie(cookie, uri);
var options = {
hostname: 'example.de',
path: '/pathexample',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Cookie': cookie,
'Accept': '/',
'Connection': 'keep-alive'
}
//,jar: j
};
http.request(options, function (resp) {
resp.setEncoding('utf8');
console.log(resp.headers);
if (resp.statusCode) {
resp.on('data', function (part) {
str += part;
});
resp.on('end', function (part) {
console.log(str);
});
resp.on('error', function (e) {
console.log('Problem with request: ' + e.message);
});
}
}).end(str);
Je suppose que le cookie sera envoyé et accepté, à ma demande, mais il ne l'est pas. J'ai aussi essayé de jar
. J'ai commenté dans le code. Mais, il ne semble pas fonctionner pour moi. Quand je fais console.log(resp.headers)
je vois les cookies d'origine, mais pas le mien. Quelqu'un peut-il me donner un indice?
Le cookie structure est correcte. Quand je lance document.cookie=cookie;
dans google chrome console il est succsessfuly remplacé.
- Qu'est-ce que la demande de module ? github.com/mikeal/request ?
- oui, exactement ce une
Vous devez vous connecter pour publier un commentaire.
Dans vos en-têtes essayer de mettre directement le cookieString
J'ai eu le même problème, @Ricardo m'a aidé à comprendre.
J'ai supprimé les pot clé à partir de l'en-tête
C'est une sorte de mix entre vos données de cookie et mon demande fonction.
var cookie = request.cookie('MC_STORE_ID=66860');
. Je faisais simplementvar headers = { 'Cookie': rawCookieStr };
Malheureusement, les deux réponses ne fonctionne pas pour moi. Je me répète, le but était de faire une requête http avec le passage d'un cookie contenant le code du magasin. Pour obtenir les pages HTML pour cette branche, pas les standards de la page me demandant de choisir un.
Après avoir essayé les deux options que je n'ai pas d'erreur, mais il ne passe pas les cookies pour le site web.
Mais merci beaucoup pour Objet de me donner les fonctions. Il m'a donné une idée pour utiliser ceux-ci et la offerts-tête avec un JSDOM. Voici donc le code qui a fonctionné pour moi:
Le cookie a été mis en succsessfuly et j'ai eu le code source des pages web pour cette direction que je voulais.
Merci pour les réponses et l'espoir que cela aiderait quelqu'un d'autre.
Votre variable cookieString est un Set-Cookie en-tête. C'est un en-tête de serveur que le serveur envoie au client, mais pas un cookie que le client envoie au serveur.
Set-Cookie en-tête :
Le client envoie dans Cookie en-Tête de cette:
Essayez ces fonctions :
Pour commencer à utiliser ce :
mkdataCookie
renvoie un objet.Alors vous pouvez le définir dans votre en-tête:
Pour convertir depuis le tableau de cookies (venant de l'-tête set-cookie de réponse) à une demande cookie: