2010-01-08 4 views
2

프록시를 통해 POST를 수행하기 위해 명령 행 말풍선을 사용하고 있지만 양식 데이터가 0 콘텐츠 길이로 사라집니다. 내가 뭘 잘못하고 있는거야?커맨드 라인 curl POST는 내용 길이가 0입니다.

여기 내 명령 줄 (다른 사람이 그것을 시도 할 수 있도록 공공 시험 양식을 사용)의 :

curl -v --proxy-ntlm --proxy proxyserver:proxyport --proxy-user : -d "fname=a&lname=b" http://www.snee.com/xml/crud/posttest.cgi

는 -v = 자세한
다음 몇 인수가 Windows 인증
를 사용하여 프록시를 통해 우리가 얻을 - d = 주어진 인수로 게시물을 작성해야합니다.

그러나 응답과 자세한 출력 모두 양식 내용이 사라진다는 것을 나타냅니다. 컬은 "Content-Length : 0"을 인쇄하고 리턴 된 html은 누락 된 인수와 내용 길이가 모두 0입니다.

curl이 컨텐츠 길이를 보내는 것을 허용하므로 버그가 프록시 서버에없는 것 같습니다 누구든지이 문제에 대한 해결책을 알고 있습니까? 다른 사람이 본 적이 있습니까?

업데이트 : this person이 같은 버그를 가지고 나타납니다,하지만 해결책은 내가

업데이트 2에이 NTLM을 사용하지 않는에서 떨어져 제안하지 :이 나는했습니다, NTLM 인증으로 발생 확실히 단지 작동하는 대체 인증 방법을 시도했습니다. 또한 -d 대신 -F (2 진 양식 데이터 용)를 사용하면 동일한 f}으로 실패합니다.

업데이트 3 (해결 방법) : 이에 대한 컬 사용자 목록에 대한 토론이있었습니다. --proxy-ntlm 대신 --proxy-anyauth를 사용하는 해결 방법이 제공되었습니다. 나는 아직도 문제를 조사하고 있지만이 workarounf는 나를 위해 일한다.

답변

2

NTLM은 시도 응답 프로토콜입니다. NTLM을 사용할 것이라는 것을 나타내면 클라이언트는 먼저 본문없이 요청을 보냅니다 (몸체를 보내는 대역폭을 낭비하지 말고 서버에서 HTTP/401 챌린지로 거부 할 수 없습니다). 챌린지/응답 프로토콜이 완료되면 본문이 실제로 게시됩니다.

이렇게하면 클라이언트가 NTLM을 예상하지만 프록시 또는 서버에 아무런 문제가 없으므로 (따라서 클라이언트에 결코 도전하지 않고 0 바이트 POST에서 작동 함) 여러 가지 문제가 발생합니다.

0

HTTP 다이제스트를 사용하여 요청하는 중 문제가 발생했습니다. Eric은 정확합니다. curl은 영리하고 모든 데이터를 게시하지 않으려 고합니다. 서버에서 챌린지를받은 후 다시 요청을해야한다는 것을 알고 있기 때문입니다.

--anyauth 옵션 (curl이 인증 방법을 자동으로 확인하도록 요청)을 제공하면 초기 요청에 모든 POST 데이터가 포함되며 서버가 예상대로 응답했습니다.

관련 문제