2014-07-31 1 views
0

전 tcl을 처음 접했습니다.TCL HTTP가 게시물 요청을 보낼 헤더를 설정했습니다.

게시 요청을 서버로 보내려고합니다. 사람들은 내가 보내려고하고있는 헤더입니다

"POST test HTTP/1.1" 
"Content-Type:application/x-www-form-urlencoded" 
"keep-alive:true" 
"Authorization: Basic khjkjkhkhkfzxc" 
"client: amin" 
"Content-Length:10" 
"ggggsis" 

내 코드는 다음과 같습니다

set bs "Basic khjkjkhkhkfzxc" 
set hd [list Authorization $bs] 
set tk[http::geturl $url -headers $hd] 

set res [http::data $tk] 
http::cleanup $tk 

return $tk 

하지 않는 이유는이 작품? 내 실수는 어디 갔지? 그리고 그것을 고치는 방법?

귀하의 도움에 감사드립니다. 감사합니다

편집 : 내 요청을 표시하는 작은 서버 소켓을 생성하고 여기 게시물에 대한 나의 새로운 코드 :

여기
set bs "Basic gfhfghfdhgf" 
    set hd [list Authorization $bs] 
    set token [http::geturl $url -headers $hd -query [::http::formatQuery blabla blablo] -type "text/xml"] 
    puts "done" 
    set postStat [http::status $token] 
    set postResp [http::data $token] 
    puts $postResp 
    puts "ok" 
    puts $postStat 

가 표시되는 것입니다

Accepted connection from 127.0.0.1 at Fri Aug 1 10:51:22 EDT 2014 
POST /QUEUE/test HTTP/1.0 
Accept: */* 
Host: localhost:9999 
User-Agent: Tcl http client package 2.5.0 
Authorization: Basic ZGVmYXVsdCJkZWZhdWx0 
Content-Type: text/xml 
Content-Length: 13 

문제는 프로그램에서 게시물을 보내지 만 이동하지 않는다는 것입니다. set token [http::geturl $url -headers $hd -query [::http::formatQuery blabla blablo] -type "text/xml"],

그리고 httpget 쿼리가 전송되지 않습니다 ("done"이 인쇄되지 않고 쿼리의 내용이 서버 측에서 인쇄되지 않습니다)

내가 잘못한 것을 설명하면 죄송합니다.

감사

+0

세 번째 줄에는 왼쪽 괄호와'tk '사이에 공백이 있습니다. 맞습니까? 리턴하기 전에 토큰에'cleanup'을 호출해서는 안된다는 점 외에도'cleanup'은 토큰의 모든 정보를 파괴합니다. 어떤 방법으로 작동하지 않습니까? –

+0

그것은 게시 요청을하지 않는 것으로 보입니다. TCL로 상단에 헤더를 만드는 방법을 보여 주실 수 있습니까? thanks – user3791570

+0

POST 요청을하려면'-query' 옵션을 제공해야합니다. 문서에서 찾아보십시오. –

답변

0

그것은 당신이 사전으로 보낼 헤더를 구축 오히려 간단 : 당신에 대해 얘기 기본 (콘텐츠 유형)에 의해 올바른 중 하나 또는 최고

dict set hdr Authorization "Basic [binary encode base64 ${user}:${pass}]" 
dict set hdr Client amin 

다른 헤더 처리 할 http 라이브러리에 남겨 둡니다.

당신은 헤더 및 데이터있어 일단,이 같은 POST 보내 : 당신은 단지 http::cleanup 명령 할 때까지 쿼리 결과에 액세스 할 수 있습니다

set token [http::geturl $theurl -headers $hdr -query $body] 
set responseBody [http::data $token] 
# Access headers here... 
http::cleanup $token 
# The token is no longer valid here 

참고가 호출된다 . 그 후에 결과는 사라집니다 (물론 변수에 저장하지 않는 한).

$body의 형식이 올바른지 확인하는 것이 좋습니다. http::formatQuery 명령은 다음을 위해 설계되었습니다.

set body [http::formatQuery fredKey fredValue daveKey daveValue foo bar] 
+0

당신의 도움을 많이 주셔서 감사합니다 – user3791570

+0

나는 당신의 코드를 시도하고 컴파일 오류가 발생했습니다 "인코딩": 형식 또는 스캔 "binary 인코딩 base64 $ {user} : $ {pass}" – user3791570

+0

이것은 버전 문제 일 수 있습니다 :'encode' /'decode' 옵션이 2008 년 Tcl 8.6에 추가되었습니다. –

관련 문제