2013-03-18 2 views
1

HTTP PUT을 통해 서버에 일반 텍스트 파일을 만드는 데 어려움을 겪고 있습니다. 나는 아파치 공유 httpClient를 사용하고 있습니다. 내 자격 증명이 작동하지만 내 요청에 본문 내용이 없습니다. 이렇게 파일을 만들려면 어떻게해야합니까? hurl.it (예 : 내 자격 증명 설정 및 본문 설정)을 통해 시도 할 때 의도 한대로 작동합니다. 내가 원하는 것은 "hej"문자열을 파일 본문에 표시하는 것입니다. 이 작업을 얻은 후에 JSONString을 사용하려고합니다. 나는 모두가 차이를 콘텐츠 형식을 설정하지 않고 그 일을하지 시도HTTPClient StringEntity PUT 문제

 HttpClient httpClient = new DefaultHttpClient(); 

     String encoding = http_username + ":" + http_password; 
     encoding = Base64.encodeBase64String(encoding.getBytes()); 
     HttpPut httpput = new HttpPut(http_path); 

     HttpEntity content=null; 
     try{ 
     content = new StringEntity("hej"); 
     } 
     catch(UnsupportedEncodingException e){ 
      logger.error("Failed to Encode result"); 
     } 


     logger.info("executing request " + httpput.getRequestLine()); 
     try { 
      httpput.setHeader("Authorization", "Basic " + encoding); 
      //httpput.setHeader("Content-Type", "application/json; charset=utf-8"); 
      httpput.setEntity(content); 
      HttpResponse response = httpClient.execute(httpput); 
      Header[] allHeaders = response.getAllHeaders(); 
      for (Header h : allHeaders) { 
       logger.info(h.getName() + ": " + h.getValue()); 
      } 

     } catch (Exception e) { 
      logger.error(e.getMessage()); 
     } 

: 다음 코드는 서버 (204 응답)의 빈 파일을 생성합니다. 내가 뭘 잘못 했니?

+0

현재 코드가 파일을 보내지 않고 요청 본문에 일반 텍스트를 보냅니다. 서버 측 리소스가 무엇을 기대하고 있습니까 (리소스 메소드를 포함하면 도움이됩니다). – Perception

+0

서버쪽에 접근 할 수 없으므로 이에 대한 많은 정보를 제공하지 않습니다. 여기에 내용을 나열 할 수 있습니다 : http://upload.cmstest01.ku.dk/ data.json 파일은 위의 코드에 의해 생성되지만 hurl.it을 통해 시도하면 data2.json이 생성됩니다 – oskbor

+2

줄 수는 없습니다. 유효한 요청이 어떻게 보이는지 알지 못하도록 조언합니다. 하지만 할 수있는 일은 Google 크롬 개발자 도구를 사용하여 hurl.it 테스트를 실행하고 네트워크 탭에서 서버로 전송되는 모든 HTTP 속성을 검사하는 것입니다. 그런 다음 해당 설정을 클라이언트 코드에 복제하십시오. 도움이 필요하면 질문에 대한 부동산 정보를 게시하십시오. – Perception

답변

1

Base64.encodeBase64String은 문자열 끝 부분에 줄 바꿈 문자를 추가하여 모든 것을 버립니다.

String encoding = http_username + ":" + http_password; 
encoding = Base64.encodeBase64String(encoding.getBytes()); 
encoding= encoding.replace("\r\n", ""); //This fixes everything 

와우, 알아 내는데 며칠이 걸렸습니다.