我做一个php服务端, java客户端以http post方式,把文件流转换为字节流,再setEntity给我, java代码片段如下:
HttpPost post = new HttpPost(postUrl);
ByteArrayEntity entity = new ByteArrayEntity(outputStream.toByteArray());
post.setEntity(entity);
if (httpClient == null) {
httpClient = new DefaultHttpClient();
}
HttpResponse response = httpClient.execute(post);
我这边需要接受http字节流,并且全部转字符串,然后做解析。
1.请问我这边应该如何去获取流?用什么接口?php://input
2.获取后字节流如何转字符串? chr?unpack?还是如何?
我感觉不是普通应用层的http方式, 是比较原始的接受http数据的方式,请大牛帮忙指点方向.
(目前我用file(php://input)获取字节流,然后chr() 转ASCII字符再写入文件查看,貌似都是乱码)
注:字节流里面只有ascii字符,没有中文字符.
回复讨论(解决方案)
补充下:
原始文件流里面的内容如下:
launch {"primary":"-1415673003223"} 1415673003223
controller {"model":"Test Controller","primary":"count"} 1415673003991
click {"click_name":"Test Button Name","primary":"count"} 1415673004598
view {"view_name":"Test Page Name","primary":"1415673005202"} 1415673005203
view {"view_name":"Test Page Name","primary":"-1415673005795"} 1415673005795
game {"package_name":"Test Game","primary":"1415673007231"} 1415673007231
game {"package_name":"Test Game","primary":"-1415673008047"} 1415673008051
如果只是存入文件 你可以
$path ="/tmp/newfile"$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';file_put_contents($path, $fileContent);
如果要进行处理 你需要
$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';//然后对$content进行字符串处理得到你需要的结构
如果只是存入文件 你可以
$path ="/tmp/newfile"$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';file_put_contents($path, $fileContent);
如果要进行处理 你需要
$content = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : '';//然后对$content进行字符串处理得到你需要的结构
我试了下您的方式, 取出来的content是乱码,这也是一直我卡住的地方。如您所见,java端在最初写入文件,到读取文件流,到转换字节流,到setEntity都没有做字符编码的特殊处理。所以接下来如何处理乱码的问题呢?
你
$s = file_get_contents('php://input');
file_put_contents('test.txt', base54_encode($s));
贴出 test.txt 的内容
你
$s = file_get_contents('php://input');
file_put_contents('test.txt', base54_encode($s));
贴出 test.txt 的内容
H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==
你说的是base64_encode吧,请指教!
你
$s = file_get_contents('php://input');
file_put_contents('test.txt', base54_encode($s));
贴出 test.txt 的内容
刚刚用mb_detect_encoding($s, "auto") 检测了下 返回的是UTF-8, 但是存到文件里用vim看是乱码。难道是vim的问题?
你
$s = file_get_contents('php://input');
file_put_contents('test.txt', base54_encode($s));
贴出 test.txt 的内容
我把文件拷贝到本地用配置好UTF-8的vim 查看,还是乱码...
接收到的的确是“乱码”,因为他做了 gzip 压缩
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034应该是这个(解压没有出错,得到的文字完整)
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034
接收到的的确是“乱码”,因为他做了 gzip 压缩
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034应该是这个(解压没有出错,得到的文字完整)
这个回答完全正确!确实是做了gzip压缩,交学费了!而且我之前也是知道他把文件流做了gzip压缩, 但是对这个不清楚所以也没有在提问中说道,自己也没有望着方面想。
另外请教一下, 你是如何得知做了gzip压缩的?小弟刚开始做php,希望不吝赐教!
接收到的的确是“乱码”,因为他做了 gzip 压缩
$s = 'H4sIAAAAAAAAAH3OXWuDMBgF4Ov2Z3gdJIn5UsiFjIwVnB3ald1JTFIaMLFYLIyx/z63wkZhFN6bw8vDOTraafS2u0SJGAijdYOs3G7/xiCY3OD02X3/dqrddY2qVNmqbq+adrOtu8dt07Xl80ulwMVFO04ynIPIF+mD8zLOwwBm/8tfN/9KIyEI2khkiswVghR0OV4cLJittxL3mFnIiYa9JY7mPTaYCJ4zwdwhs73jiNIeI2COOsZl/U/Xw1NZ16q6KYrXRf4kEUypSGmWYsLWg56jOa4+ktPkg57ekyJBBFEmMs44Ezz5XN3kOyCHDGbkD1zz+gslJTZeZAEAAA==';$s = base64_decode($s);echo gzdecode($s);
android_vn=16,model=LeTVX60,release_vn=TEST_RELEASE_VERSION_FOR_SAMPLE,vendor=msm8960,imei=null,ui_vn=TEST_UI_VERSION_FOR_SAMPLE,vc=0,mac=1c:3e:84:54:57:fd,udid=2b26d074a0bd4e59b2c24879686ef3dbe7155b21,channel=TEST_CHANNEL_FOR_SAMPLE,vn=null,ip=10.58.53.246launch {"primary":"1415683767687"} 1415683767687launch {"primary":"1415683906034"} 1415683906034应该是这个(解压没有出错,得到的文字完整)
感谢回答,另外也感谢orangeholic 这位朋友的帮助!
base64 解码后的是二进制串,而你在#1补充了原始文件的样式(显然不是二进制的)
所以尝试了可能的压缩算法,不想一下就对上了
补充一下,得到的串的同两个字符是 "\x1f\x8b"
这是 gzip 的文件头标识
补充一下,得到的串的同两个字符是 "\x1f\x8b"
这是 gzip 的文件头标识
学习了!多谢! 100分已经给你了!赞!

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

PHP에서는 클론 키워드를 사용하여 객체 사본을 만들고 \ _ \ _ Clone Magic 메소드를 통해 클로닝 동작을 사용자 정의하십시오. 1. 복제 키워드를 사용하여 얕은 사본을 만들어 객체의 속성을 복제하지만 객체의 속성은 아닙니다. 2. \ _ \ _ 클론 방법은 얕은 복사 문제를 피하기 위해 중첩 된 물체를 깊이 복사 할 수 있습니다. 3. 복제의 순환 참조 및 성능 문제를 피하고 클로닝 작업을 최적화하여 효율성을 향상시키기 위해주의를 기울이십시오.

PHP는 웹 개발 및 컨텐츠 관리 시스템에 적합하며 Python은 데이터 과학, 기계 학습 및 자동화 스크립트에 적합합니다. 1.PHP는 빠르고 확장 가능한 웹 사이트 및 응용 프로그램을 구축하는 데 잘 작동하며 WordPress와 같은 CMS에서 일반적으로 사용됩니다. 2. Python은 Numpy 및 Tensorflow와 같은 풍부한 라이브러리를 통해 데이터 과학 및 기계 학습 분야에서 뛰어난 공연을했습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
