rest php - ¿Cómo utilizar cURL para enviar cookies?




send session (4)

He leído que Enviar cookies con rizo funciona, pero no para mí

Tengo un punto final REST como

class LoginResource(restful.Resource):
    def get(self):
        print(session)
        if 'USER_TOKEN' in session:
            return 'OK'
        return 'not authorized', 401

cuando intento acceder como

curl -v -b ~/Downloads/cookies.txt -c ~/Downloads/cookies.txt http://127.0.0.1:5000/
* About to connect() to 127.0.0.1 port 5000 (#0)
*   Trying 127.0.0.1...
* connected
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.27.0
> Host: 127.0.0.1:5000
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 401 UNAUTHORIZED
< Content-Type: application/json
< Content-Length: 16
< Server: Werkzeug/0.8.3 Python/2.7.2
< Date: Sun, 14 Apr 2013 04:45:45 GMT
<
* Closing connection #0
"not authorized"%

donde mi ~/Downloads/cookies.txt es

cat ~/Downloads/cookies.txt
USER_TOKEN=in

y el servidor no recibe nada

127.0.0.1 - - [13/Apr/2013 21:43:52] "GET / HTTP/1.1" 401 -
127.0.0.1 - - [13/Apr/2013 21:45:30] "GET / HTTP/1.1" 401 -
<SecureCookieSession {}>
<SecureCookieSession {}>
127.0.0.1 - - [13/Apr/2013 21:45:45] "GET / HTTP/1.1" 401 -

¿Qué es eso que me estoy perdiendo?


Answers

puede consultar https://curl.haxx.se/docs/http-cookies.html para obtener un tutorial completo sobre cómo trabajar con cookies. puedes usar

curl -c /path/to/cookiefile http://yourhost/

para escribir en un archivo de cookies y poner en marcha el motor y usar cookies que puede usar

curl -b /path/to/cookiefile  http://yourhost/

para leer las cookies e iniciar el motor de cookies, o si no es un archivo, pasará la cadena dada.


Esto funciono para mi

 curl -v --cookie "USER_TOKEN=Yes" http://127.0.0.1:5000/

Pude ver el valor en el backend usando

print request.cookies

Está utilizando un formato incorrecto en su archivo de cookie. Como indica la documentación de Curl , utiliza un antiguo formato de archivo de cookies de Netscape, que es diferente del formato utilizado por los navegadores web. Si necesita crear un archivo de cookie de curl manualmente, esta publicación le ayudará. En su ejemplo, el archivo debe contener la siguiente línea

127.0.0.1   FALSE   /   FALSE   0   USER_TOKEN  in

tener 7 campos separados por TAB que significan dominio , emparejamiento , ruta , seguro , caduca , nombre , valor .


Se modificó el código que lee la respuesta de Rest API como;

ParameterizedTypeReference<RestResponsePage<MyObject>> responseType = new ParameterizedTypeReference<RestResponsePage<MyObject>>() { };

ResponseEntity<RestResponsePage<MyObject>> result = restTemplate.exchange(url, HttpMethod.GET, null/*httpEntity*/, responseType);

List<MyObject> searchResult = result.getBody().getContent();

Y aquí está la clase que creé para RestResponsePage

package com.basf.gb.cube.seq.vaadinui.util;

import java.util.ArrayList;
import java.util.List;

import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;

public class RestResponsePage<T> extends PageImpl<T>{

  private static final long serialVersionUID = 3248189030448292002L;

  public RestResponsePage(List<T> content, Pageable pageable, long total) {
    super(content, pageable, total);
    // TODO Auto-generated constructor stub
  }

  public RestResponsePage(List<T> content) {
    super(content);
    // TODO Auto-generated constructor stub
  }

  /* PageImpl does not have an empty constructor and this was causing an issue for RestTemplate to cast the Rest API response
   * back to Page.
   */
  public RestResponsePage() {
    super(new ArrayList<T>());
  }

} 






rest session curl flask session-cookies