HttpURLConnection 이상 java. io. FileNotFoundException
5052 단어 기초 지식
우리 의 서버 데 이 터 는 두 가지 유형 이 있 기 때문에 하 나 는 xml (요청 테이프 파라미터, 즉 post 방식) 이 고 하 나 는 json 형식 (요청 파 라 메 터 는 url 뒤에 직접 추가 되 며 get 방식 이 어야 합 니 다) 입 니 다.
이전에 요청 한 이 두 가지 데 이 터 는 모두 같은 방식 으로 얻 은 post 방식 입 니 다. 방법 은 다음 과 같 습 니 다.
json 데이터 주소http://72.52.93.xxx/hdepg_data/dataForQuanQiuBo/2220143.js
/**
* post
* @param param
* @param urlStr
* @param contentType
* @return
*/
public InputStream postMethod(String param, String urlStr,
String contentType) {
InputStream is = null;
try {
byte[] xmlData = param.getBytes("UTF-8");
URL url = new URL(urlStr);
URLConnection urlCon = url.openConnection();
urlCon.setDoOutput(false);
urlCon.setDoInput(true);
urlCon.setConnectTimeout(40000);
urlCon.setReadTimeout(40000);
urlCon.setUseCaches(false);
urlCon.setRequestProperty("Content-Type", contentType);
urlCon.setRequestProperty("Content-length",
String.valueOf(xmlData.length));
DataOutputStream printout = new DataOutputStream(
urlCon.getOutputStream());
printout.write(xmlData);
printout.flush();
printout.close();
is = urlCon.getInputStream();
} catch (IOException e) {
Log.e(TAG, "Url connection failed!");
e.printStackTrace();
} catch (Exception e) {
Log.e(TAG, "Failed getting input stream!");
e.printStackTrace();
}
return is;
}
나중에 제 이 슨 데이터 가 주 소 를 바 꾸 었 습 니 다.http://xxx.hanyastar.com/hdepg_data / dataForQuanQiuBo / xxxx. js, post 방식 으로 데 이 터 를 요청 할 때 java. io. FileNotFoundException 이상 이 발생 합 니 다.느낌 이 이상 하 다. 주 소 를 바 꿨 을 뿐 다른 조작 은 변 하지 않 았 는데 왜 성공 적 으로 접근 하지 못 했 을 까?
나중에 인터넷 에 접속 해서 찾 아 보 니 누군가가 이렇게 말 하 는 것 을 발견 했다.
:http://www.mikebai.com/html/2012-03/939.html
4.0
app, xml :java.io.FileNotFoundException: http://www.jpfocus.com/xxxx.xml
2.3
:
URL url = new URL(urlstr);
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setRequestMethod("GET");
httpCon.setDoOutput(true);
httpCon.connect();
:
4.0 httpCon.setDoOutput(true), post , httpCon.setRequestMethod("GET");
httpCon.setDoOutput(true);
setDoOutput(true)
, true, , body server , POST PUT 。GET 。
새 주 소 는 post 방식 을 지원 하지 않 습 니까?
그래서 나 는 요청 방법 을 수정 했다.
public InputStream postMethodHanya(String param, String urlStr,
String contentType) {
InputStream is = null;
try {
byte[] xmlData = param.getBytes("UTF-8");
URL url = new URL(urlStr);
URLConnection urlCon = url.openConnection();
urlCon.setDoOutput(false);
urlCon.setDoInput(true);
urlCon.setConnectTimeout(40000);
urlCon.setReadTimeout(40000);
urlCon.setUseCaches(false);
// urlCon.setRequestProperty("Content-Type", contentType);
// urlCon.setRequestProperty("Content-length",
// String.valueOf(xmlData.length));
// // urlCon.setFixedLengthStreamingMode(xmlData.length);
// DataOutputStream printout = new DataOutputStream(
// urlCon.getOutputStream());
// printout.write(xmlData);
// printout.flush();
// printout.close();
is = urlCon.getInputStream();
} catch (IOException e) {
Log.e(TAG, "Url connection failed!");
e.printStackTrace();
} catch (Exception e) {
Log.e(TAG, "Failed getting input stream!");
e.printStackTrace();
}
return is;
}
post 의 body 인 자 를 설명 합 니 다. (설명 하지 않 으 면 setDoOutput 이 false 로 설정 되 었 을 때 보고 합 니 다. java. net. ProtocolException: method does not support a request body: GET), setDoOutputs 는 false (또는 주석 제거) 로 설정 합 니 다.이 방법 으로 새 주소 json 데 이 터 를 가 져 오 면 성공 합 니 다.get 방식 으로 제 이 슨 데 이 터 를 얻 었 지만 왜 두 주소 의 앞 뒤 차이 가 있 는 지 아직 모 르 겠 습 니 다. 여기에 기록 하 세 요.대신 이 아시 면 가르쳐 주 십시오.
ps: setDoInput 과 setDoOutput 의 의미
public void setDoInput(boolean doinput) URLConnection 의 doInput 필드 의 값 을 지정 한 값 으로 설정 합 니 다.
URL 연결 은 입력 과 / 또는 출력 에 사용 할 수 있 습 니 다.하면, 만약, 만약... URL 연결 하여 입력 하면 DoInput 플래그 설정 true;사용 하지 않 으 려 면 false。기본 값 true。
public void setDoOutput(boolean dooutput) 이것 을 URLConnection 의 doOutput 필드 의 값 을 지정 한 값 으로 설정 합 니 다.
URL 연결 은 입력 과 / 또는 출력 에 사용 할 수 있 습 니 다.하면, 만약, 만약... URL 연결 하여 출력 하면 DoOutput 플래그 설정 true;사용 하지 않 으 려 면 false。기본 값 false。
httpUrlConnection.setDoOutput(true);나중에 conn. getOutputStream (). write () 를 사용 할 수 있 습 니 다.
httpUrlConnection.setDoInput(true);나중에 conn. getInputStream (). read () 를 사용 할 수 있 습 니 다.
get 요청 은 conn. getOutputStream () 을 사용 할 수 없습니다. 매개 변 수 는 주소 뒤에 직접 추가 되 기 때문에 기본 값 은 false 입 니 다.
post 요청 (예: 파일 업로드) 은 서비스 구역 에 대량의 데 이 터 를 전송 해 야 합 니 다. 이 데 이 터 는 http 의 body 에 놓 여 있 기 때문에 연결 을 만 든 후에 서버 에 데 이 터 를 써 야 합 니 다.
항상 conn. getInputStream () 을 사용 하여 서버 의 응답 을 가 져 오기 때문에 기본 값 은 true 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Openssh 원격 연결 서버Openssh 원격 연결 서버 SSH(Secure Shell) 버전 정보 SSH2 작동 메커니즘 서버 sshd Ubuntu 설치 & 시작 CentOS 업데이트 & 시작 sshd가 프로세스에 있는지 확인 ssh 버전 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.