curl이이 쿼리 문자열을 자르는 이유는 무엇입니까?


90

나는 이것에 대한 대답이 고통스럽고 명백한 문자 인코딩 문제가 될 것이라고 확신합니다 ...

파이썬 앱에서 일부 엔드 포인트를 테스트하기 위해 명령 줄에서 curl을 사용하고 있습니다. 끝점은 위도와 경도의 URL 매개 변수를 사용합니다. 너무 특별한 것은 없습니다. 나는 명령을 넣었다.

curl -v -L http://localhost:5000/pulse/?lat=41.225&lon=-73.1

서버가 verbose curl 출력으로 응답합니다.

* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET /pulse/?lat=41.225 HTTP/1.1
> User-Agent: curl/7.21.6 (i686-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3
> Host: localhost:5000
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 500 INTERNAL SERVER ERROR
< Content-Type: application/json
< Content-Length: 444
< Server: Werkzeug/0.8.1 Python/2.7.2+
< Date: Wed, 01 Feb 2012 17:06:29 GMT
< 
{
    "msg": "TypeError: float() argument must be a string or a number", 
    "flag": 0, 
    "stack": [
        "Traceback (most recent call last):", 
        "  File \"engine.py\", line 139, in dispatch_request", 
        "    return getattr(self, 'action_'+endpoint)(request, **values)", 
        "  File \"engine.py\", line 818, in action_getpulse", 
        "    lon = float(request.args.get('lon'))"
    ], 
    "err": 1
* Closing connection #0
}
[1]+  Done

덤프의 두 번째 줄에서 두 번째 매개 변수, lon가 전송되지 않는 것이 분명합니다 . 내가 도대체 ​​뭘 잘못하고있는 겁니까? 감사.


1
아마도 원래의 질문과 관련이없는,하지만 난 쿼리 문자열의 일부가 누락 된 경우 나는 다른 400 또는 무언가가 아닌 500 반환
마이클 Munsey

답변:


246

"내가 뭘 잘못하고 있는가?"라는 질문에 대한 대답은 쉘이 앰퍼샌드 ( &)를 보고 이것이 명령의 끝이라고 생각한다는 것입니다 (그리고 배경에 넣습니다). 인용해야하므로 문자열을 인용 한 답변이 작동합니다. 다음과 같이 쉽게 실행할 수 있습니다.

curl -v -L "http://localhost:5000/pulse?lat=41.225&lon=-73.1"

나는 많은 성공없이 창 아래 gitbash에서 그것을 시도 해왔다
avi.elkharrat

35

나는 당신이 이것을 시도 할 수 있다고 생각합니다.

 curl -v -L -d "lat=41.225&lon=-73.1" http://localhost:5000/pulse

기본적으로 POST를 호출합니다. GET 요청을 보내려면

 curl -v -L -G -d "lat=41.225&lon=-73.1" http://localhost:5000/pulse

더 많이 ...
당신이 사용하고 있기 때문에 localhost사용한다면, https당신은 아마 포함 할 것 -k인증서 오류를 무시하는 옵션으로

이것을 지적한 Ross 에게 감사합니다 .


이것이 포스트라면 작동하지만 불행히도 매개 변수는 GET을 통해 URL 변수로 전달되어야합니다.
DeaconDesperado

4
-G스위치 를 사용해 보셨습니까 ?
Nishant

1
귀하의 경우에도 (문제에서와 같이) URL을 큰 따옴표로 쿼리 문자열로 둘러싸려고 했습니까?
Nishant

그리고 localhost를 사용하고 있기 때문에 https를 사용한다면 인증서 오류를 무시하는 옵션으로 -k를 포함하고 싶을 것입니다.
로스

이 방법 중 어느 것도 나를 위해 작동하지 않습니다. 문자열을 전달하면 항상 공백으로 표시됩니다. Grizzly 서버로 보내는 중입니다.
user3217883
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.