Android OkHttp进行https请求怎么禁止代理服务器 或者说防止fiddler抓包

我之前有个请求,用DefaultHttpClient实现的https请求,是禁止走代理的
现在网络换成OkHttp3了,添加了自己的证书和信任后,访问正常,但默认是可以走代理的,fiddler对这种情况,安装的它的证书就能抓到所以请求信息,这个怎么杜绝?
求大神们指路!!!

2个回答

别让别人知道你的证书就行了

dongfeng9ge
东风玖哥 回复xzwzyf385253067: 申请参数用base64加密两次
3 年多之前 回复
xzwzyf385253067
xzwzyf385253067 别人是不知道我的证书,可是fiddler,这个只要手机安装了fiddler的证书,这个代理服务器就能抓到数据了
3 年多之前 回复

发现原来我的测试机里安装了fiddler的证书,并且校验的时候好像校验了本地的证书,所以能抓到内容,修改后,校验过程只包含自己信任的证书,就不会被抓包了。
还有一个问题是,连接fiddler代理服务器,首次请求会失败,java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
,但之后的请求就都正常了,或者不连接代理,也一切正常,不知道这是什么原因

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android okhttp怎么修改网络请求的默认端口号
因为项目需求 需要在请求服务器时修改默认的端口号,我用的是https请求,来个大神教我一下啊
OkHttp能否获取到重定向后的URL?
目前写个小应用,需要模拟登录,但是登录后服务器会出现302,重定向一个Url。采用的是Okhttp的方式进行POST请求,如何能够获得重定向的url? 客户端POST请求后返回200响应吗,并直接将重定向后的网页返回来 本来想通过response.headers("Location");获取重定向url,但是获取不到,得到的headers全是重定向后的内容,其中并没有Location
Android 使用RxJava请求重复
我在点击按钮的时候请求服务器; 但是第二次请求的时候会自动发送两边请求,第三次会发送三次请求; 但是理论上在onCompleted()调用的时候会自动取消订阅,为什么还会这么多请求呢? 求大神帮忙看一下: 点击事件: ``` java findViewById(R.id.send_button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendTohttp(); } }); ``` 订阅事件 ```java private void sendTohttp() { HttpManager.getInstance().rxHttp("http://hehero.com/test/tb.html").subscribe(new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { mTextView.setText(s); onCompleted(); } }); } ``` 网络请求部分 ```java public Observable<String> rxHttp(final String url) { return Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { try { //OkHttp请求 Response response = getCall(url).execute(); if (response.isSuccessful()) { subscriber.onNext(response.body().string()); } else { subscriber.onError(new Exception(response.message())); } } catch (IOException e) { subscriber.onError(e); } } }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()); } ``` 日志如下: ``` //第一遍请求 D/OkHttp: --> POST http://hehero.com/test/tb.html http/1.1 (9-byte body) D/OkHttp: <-- 200 OK http://hehero.com/test/tb.html (103ms, unknown-length body) //清除日志第二遍请求 --> POST http://hehero.com/test/tb.html http/1.1 (9-byte body) --> POST http://hehero.com/test/tb.html http/1.1 (9-byte body) <-- 200 OK http://hehero.com/test/tb.html (73ms, unknown-length body) <-- 200 OK http://hehero.com/test/tb.html (73ms, unknown-length body) //清除日志 第三遍请求 --> POST http://hehero.com/test/tb.html http/1.1 (9-byte body) --> POST http://hehero.com/test/tb.html http/1.1 (9-byte body) --> POST http://hehero.com/test/tb.html http/1.1 (9-byte body) <-- 200 OK http://hehero.com/test/tb.html (71ms, unknown-length body) <-- 200 OK http://hehero.com/test/tb.html (71ms, unknown-length body) <-- 200 OK http://hehero.com/test/tb.html (72ms, unknown-length body) ``` 问题:就是每次请求好像以前的订阅关系并没有取消订阅,而是重新成生一个新的订阅,我尝试过主动unsubscribe(),但是还是一样的效果,求解答
Android POST请求上传中文到 JAVA 后台服务器显示乱码
Android这边使用的是OKHTTP3作为网络框架的,我查了一下发现它的默认编码就是UTF-8,请求时使用了一个工具类来提交POST请求,代码如下: ``` public static Object[] postHttp(Context context, String url, HashMap<String, String> params, String cachetype, int cacheseconds) { try { // 缓存文件夹 File cacheFile = new File(context.getExternalCacheDir().toString(), "cache"); // 缓存大小为50M int cacheSize = 50 * 1024 * 1024; // 创建缓存对象 final Cache cache = new Cache(cacheFile, cacheSize); OkHttpClient mOkHttpClient = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(20, TimeUnit.SECONDS) .cache(cache) .build(); FormBody.Builder formBodyBuilder = new FormBody.Builder(); for (Map.Entry<String, String> entry : params.entrySet()) formBodyBuilder.add(entry.getKey(), entry.getValue()); RequestBody formBody = formBodyBuilder.build(); CacheControl cacheControl = null; if (cachetype.equals(TYPE_CACHE_CONTROL)) { cacheControl = new CacheControl.Builder() .maxAge(cacheseconds, TimeUnit.SECONDS).build(); } if (cachetype.equals(TYPE_FORCE_CACHE)) { cacheControl = FORCE_CACHE; } if (cachetype.equals(TYPE_FORCE_NETWORK)) { cacheControl = FORCE_NETWORK; } Request request = new Request.Builder() .cacheControl(cacheControl) .url(url) .post(formBody) .build(); Response response = mOkHttpClient.newCall(request).execute(); String result = response.body().string(); // ... } catch (Exception e) { // ... } } ``` JAVA后台已经设置了编码: ``` request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); ``` TOMCAT中的server.xml中也进行了设置: ``` <Connector port="8080" protocol="HTTP/1.1" useBodyEncodingForURI="true" URIEncoding="utf-8" connectionTimeout="20000" redirectPort="8443" /> ``` Android上传中文的时候,服务器接收到的是%E5%95%A6%E5%95%A6%E5%95%A6这样的编码。 这个问题困扰了我很久,请问有大神知道解决方案吗?
Android 网络请求 重定向之后数据丢失
在项目中访问登录接口,服务器使用重定向,然后请求之后之前的数据丢失了,请求里面只有重定向之后的数据,之前用的OkHttp3.3.1 , 然后试了一下XUtils 请求结果都是一样的。最终获取的结果:第一次请求的数据为null,只能获取到第二次请求的数据。
ohhttp请求服务器以后,根据结果,开启一个服务,在其他页面取消这个服务,但对线程有疑惑
我用okhttp请求服务器,在得到结果以后,根据结果内容,开启一个服务,服务是用来进行一个倒计时功能的, 我是在okhttp里的 ``` @Override public void onResponse(Call call, Response response) throws IOException { Looper.prepare(); String str=response.body().string(); /** * 根据服务器返回结果弹出Toast */ if (str.equals("预约成功")){ Toast.makeText(mContext,str,Toast.LENGTH_SHORT).show(); /** * 定时任务,闹钟提醒 */ ShareUtils.putString(mContext.getApplicationContext(),"ROOMNUMBER",POsition); ShareUtils.putString(mContext.getApplicationContext(),"SEATNMBER",number); //*************** Intent intent1=new Intent(mContext, MyService.class); mContext.startService(intent1); //*************** }else { Toast.makeText(mContext,str,Toast.LENGTH_SHORT).show(); } /** * */ Looper.loop(); } ``` 但我感觉这个方法不是在子线程里面运行吗?我在这个里面开启的服务,能关闭吗? 我是想在一个fragment里面,关闭这个服务,但是我关闭服务的代码写在主线程了, 两个不一样的线程开启服务,关闭服务能行吗? ``` handler =new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 9: //关掉预约成功之后计时的服务 Intent stopIntent = new Intent(getActivity(),MyService.class); getActivity().stopService(stopIntent); Toast.makeText(getContext(),"签到成功",Toast.LENGTH_SHORT).show(); //******* SHUJUKU(); //******** //ShareUtils.putBoolean(getContext().getApplicationContext(),"married",true); ShareUtils.putBoolean(getContext().getApplicationContext(),"married",true); SharedPreferences.Editor editor4 = getContext().getSharedPreferences("data", Context.MODE_PRIVATE) .edit(); editor4.putString("STATE", "1"); editor4.apply(); onResume(); break; ``` 我想在这里关闭这个服务,请问我目前这样写能达到我想要的效果吗? 我如果在第一个请求结果里面也用hander处理,在hander里面来开启这个服务会怎样呢?
安卓HttpURLConnection通过POST连接服务器问题
先上代码,我估计是最简单的一个发起通信的请求了吧(然而萌新真的很懵)。 ``` public void sendRequestWithHttp(){ new Thread(new Runnable() { HttpURLConnection httpURLConnection; JSONObject jsonObject=new JSONObject(); @Override public void run() { try{ jsonObject.put("CarId",1); URL url=new URL("http://192.168.1.108:8080/transportservice/type/jason/action/GetCarSpeed"); httpURLConnection=(HttpURLConnection) url.openConnection(); httpURLConnection.setDoOutput(true); httpURLConnection.setDoInput(true); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setReadTimeout(8000); httpURLConnection.setUseCaches(false); DataOutputStream dataOutputStream=new DataOutputStream(httpURLConnection.getOutputStream()); String message=String.valueOf(jsonObject); dataOutputStream.writeBytes(message); dataOutputStream.flush(); dataOutputStream.close(); httpURLConnection.disconnect(); }catch (Exception e){ e.printStackTrace(); } } }).start(); } ``` emmmm大佬们,我现在只想向服务器发送数据,只要发过去就好QwQ 然后无论我怎么点击发送按钮(上方代码放在按钮事件中),服务器都没有一丝丝的反应(url地址是没问题的,这个可以放心)。 ``` Setting device_provisioned has moved from android.provider.Settings.Secure to android.provider.Settings.Global. jank_removeInvalidNode all the node in jank list is out of time ``` (尤其是第二个,报的最多,我百度了好久也没明白什么意思) (顺便问一下大佬,这个HttpURLConnection是从哪一步开始向服务器发起连接请求及数据的---比如OkHttp里面有一句 ``` Request request=new Request.Builder().url("http://192.168.1.108:8080/transportservice/type/jason/action/GetCarSpeed").post(requestBody).build(); ``` 起这个作用的。 ) 下面是修改后的代码,至于原因—大概就是不同的那一行出的问题吧 ``` JSONObject jsonObject=new JSONObject(); jsonObject.put("CarId",1); URL url=new URL("http://192.168.1.108:8080/transportservice/type/jason/action/GetCarSpeed"); httpURLConnection=(HttpURLConnection) url.openConnection(); httpURLConnection.setRequestProperty("Content-Type","application/json"); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoInput(true); httpURLConnection.setDoOutput(true); httpURLConnection.setReadTimeout(500000); httpURLConnection.setConnectTimeout(8000); httpURLConnection.setUseCaches(false); httpURLConnection.getOutputStream().write(String.valueOf(jsonObject).getBytes()); int code=httpURLConnection.getResponseCode(); httpURLConnection.disconnect(); ``` 总而言之,只修改了两个地方: 一个是读数据的时间,一个是发送数据的方式。
viewPager滑动浏览一组大图,滑动倒数第二张时请求新数据追加数据
* 在listView中点击例如“美女图片”后打开一个largeActivity; * largeActivity中有一个viewPager实现左右滑动浏览大图; * 在largeActivity打开的时候会通过okHttp从服务器请求一组5张图片链接,图片通过glide加载在viewPager中实现左右滑动浏览; * 因为每次网络请求只能返回5张图片链接,所以我在监听每次滑动viewPager的时候判断当前 postion小于存储图片链接的imageList.size() -1的时候,也就是每次滑动到倒数第二张的时候去网络请求下一组图片的链接; * 然后通过add将新请求到的图片链接添加进imageList,然后再执行一次pagerAdapter.notifyDataSetChanged()来实现viewPager继续滑动浏览新请 求到的图片。 > 现在问题是如果用户以正常速度滑动viewPager来浏览每张图片的时候是没有任何问题的,但是如果用户飞速滑动viewPager的进行浏览的时候就会出现在某一次请求新数据后就会出现APP崩溃的情况;错误信息在两部不同的手机上报错不一样,但是都是在相同的情况下崩溃。Google遍都没有找到解决办法 **华为荣耀报错如下:** ![图片说明](https://img-ask.csdn.net/upload/201703/21/1490110449_933152.jpg) > 通过华为手机的报错在网上找到通过设置 android:hardwareAccelerated="false"来关闭硬件加速的办法,但是通过测试在快速滑动时还是会导致APP崩溃自动重启的情况 **乐视max2报错如下:** ``` 03-21 05:42:44.071 18730-18730/com.abcd.reader.abcdreader E/InputEventReceiver: Exception dispatching input event. 03-21 05:42:44.071 18730-18730/com.abcd.reader.abcdreader E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback 03-21 05:42:44.084 18730-18730/com.abcd.reader.abcdreader E/MessageQueue-JNI: java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 25, found: 30 Pager id: com.abcd.reader.abcdreader:id/vp_pager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.abcd.reader.abcdreader.adapter.FollowDetailViewPagerAdapter ``` > 通过乐视手机的报错怀疑是当新请求的数据add进imageList后,但是还没来得及执行notifyDataSetChanged,刚好在这时用户在滑动viewPager的时候导致的;为了验证猜测我修改了在当前 postion小于存储图片链接的imageList.size() -2的时候,也就是每次滑动到倒数第三张的时候去网络请求下一组图片的链接;给imageList.add和notifyDataSetChanged预留了充分的执行时间,这时候再次测试问题消失,华为手机和乐视手机均没有再出现APP崩溃重启的情况 > 但是我这个服务器请求回来的数据是不固定的,有时候可能每次返回5条,有时候10条,有时候只有1条,所以我现在的解决办法并不能彻底解决烦请老师们给予指点一二,万分感谢!
智能POS机连接WIFI向服务端发交易请求偶发性报sockettimeout?
###1、问题描述 智能POS机使用移动网络(流量卡)向服务端发交易请求没有异常,都能正常使用。 连接WiFi的时候会出现偶发性的网络异常,因为是在生产商户使用中出现的问题,只能 根据现象和提示,判断是出现了sockettimeout,但是我们在公司没有复现过这种情况, 也测试了大量的交易和不同的环境,但是均未复现。 ###2、环境 POS机是安卓写的,网络框架是OKHTTP3,服务端是C写的,阿里云服务器Centos7。 ###3、难点 因为是生产商户偶发性出现这种情况,而且目前未能找到原因,望能提供些许帮助,谢谢!!!
android studio运行报下列错误
1.貌似有问题的代码 package com.example.coolweather; import android.app.Fragment; import android.app.ProgressDialog; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.example.coolweather.db.City; import com.example.coolweather.db.County; import com.example.coolweather.db.Province; import com.example.coolweather.util.HttpUtil; import com.example.coolweather.util.Utility; import org.litepal.crud.DataSupport; import java.io.IOException; import java.util.ArrayList; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; /** * Created by Airth on 2019/5/10. */ public class ChooseAreaFragment extends Fragment { public static final int LEVEL_PROVINCE=0; public static final int LEVEL_CITY=1; public static final int LEVEL_COUNTY=2; private ProgressDialog progressDialog; private TextView titleText; private Button backButton; private ListView listView; private ArrayAdapter<String> adapter; private List<String> dataList = new ArrayList<>(); private int currentLevel; //当前被选中的级别 private Province selectedProvince;//被选中的省份 private City selectedCity;//被选中的城市 private List<Province> provinceList;//省列表 private List<City> cityList;//市列表 private List<County> countyList ;//县列表 /*获取控件实例id*/ @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { Log.d("ChooseAreaFragment","onCreateView"); View view = inflater.inflate(R.layout.choose_area,container,false); titleText = (TextView)view.findViewById(R.id.title_text); //获取标题栏文本id backButton = (Button) view.findViewById(R.id.back_button); //获取标题栏id listView = (ListView)view.findViewById(R.id.list_view); //获取Item列表id //获取ArrayAdapter对象 adapter =new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, dataList); listView.setAdapter(adapter);//设置并初始化适配器 return view;//将视图返回 } /*点击事件集合*/ @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { Log.d("ChooseAreaFragment","onActivityCreated"); super.onActivityCreated(savedInstanceState); //列表任意一栏被点击,则... listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.d("ChooseAreaFragment","列表被点了的..."); if (currentLevel == LEVEL_PROVINCE){ //当前选中的级别为省份时 selectedProvince = provinceList.get(position); //当前点击为选中状态 queryCities();//查询市的方法 } else if (currentLevel == LEVEL_CITY){ selectedCity = cityList.get(position); queryCounties(); } } }); backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (currentLevel == LEVEL_COUNTY){ queryCities(); } else if (currentLevel == LEVEL_CITY){ queryProvinces(); } } }); queryProvinces(); } private void queryCities() { titleText.setText(selectedProvince.getProvinceName()); //设置市的标题内容 backButton.setVisibility(View.VISIBLE); //设置返回按钮可见 //查询被选中的省份城市的市区 cityList = DataSupport.where("provinceid=?",String.valueOf(selectedProvince. getId())).find(City.class); Log.d("ChooseAreaFragment","市级"); if (cityList.size()>0){ //如果省列表不为空,则... dataList.clear(); for (City city:cityList){ //遍历每一份省的市级城市 dataList.add(city.getCityName()); //添加到数据列表中 } adapter.notifyDataSetChanged();//通知适配器数据更新了 listView.setSelection(0); currentLevel = LEVEL_CITY; } else{ int provinceCode = selectedProvince.getProvinceCode(); //获取被选取省级代码 String address = "http://guolin.tech/api/china/"+provinceCode;//获取被选取地区的网络地址 Log.d("ChooseAreaFragment","准备在网络中获取地址信息"); queryFromServer(address,"city"); // 在网络中查询 } } /*根据传入的地址和类型从服务器查询省市县数据*/ private void queryFromServer(String adress, final String type) { showProgressDialog(); // 发送一条网络请求 HttpUtil.sendOKHttpRequest(adress, new Callback() { //请求加载失败 @Override public void onFailure(Call call, IOException e) { //通过runOnUiThread方法回到主线程逻辑 getActivity().runOnUiThread(new Runnable() { @Override public void run() { closeProgressDialog(); Toast.makeText(getContext(),"加载失败",Toast.LENGTH_SHORT).show(); } }); } @Override public void onResponse(Call call, Response response) throws IOException { Log.d("ChooseAreaFragment","加载地区信息..."); String responseText = response.body().string(); boolean result = false; if ("province".equals(type)){ result = Utility.handleProvinceResponse(responseText); } else if ("city".equals(type)){ result = Utility.handleCityResponse(responseText,selectedProvince.getId()); } else if ("county".equals(type)){ result = Utility.handleCountyResponse(responseText, selectedCity.getId()); } if (result) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { Log.d("ChooseAreaFragment","开启线程更新UI"); closeProgressDialog(); if ("province".equals(type)){ queryProvinces(); } else if ("city".equals(type)){ queryCities(); } else if ("county".equals(type)){ queryCounties(); } } }); } if ("city".equals(type)){ result = Utility.handleProvinceResponse(responseText); } if ("county".equals(type)){ result = Utility.handleProvinceResponse(responseText); } } }); } /*显示进度对话框*/ private void showProgressDialog() { if (progressDialog==null){ progressDialog = new ProgressDialog(getActivity()); progressDialog.setMessage("正在加载..."); progressDialog.setCanceledOnTouchOutside(false); } progressDialog.show(); } private void queryCounties() { titleText.setText(selectedCity.getCityName()); backButton.setVisibility(View.VISIBLE); countyList = DataSupport.where("cityid = ?", String.valueOf(selectedCity.getId())).find(County.class); if (countyList.size()>0){ dataList.clear(); for (County county:countyList){ dataList.add(county.getCountyName()); } adapter.notifyDataSetChanged(); listView.setSelection(0); currentLevel=LEVEL_COUNTY; } else { int provinceCode = selectedProvince.getProvinceCode(); int cityCode = selectedCity.getCityCode(); String address = "http://guolin.tech/api/china/"+provinceCode+"/"+cityCode; queryFromServer(address,"county"); } } /*全国所有的省,优先查询数据库,如果没有再去服务器查询*/ private void queryProvinces() { titleText.setText("中国"); Log.d("ChooseAreaFragment","查询省中..."); backButton.setVisibility(View.GONE); provinceList = DataSupport.findAll(Province.class); if (provinceList.size()>0){ dataList.clear(); for (Province province:provinceList){ dataList.add(province.getProvinceName()); } adapter.notifyDataSetChanged(); listView.setSelection(0); currentLevel = LEVEL_PROVINCE; } else { Log.d("ChooseAreaFragment","服务器查询省中..."); String address = "http://guolin.tech/api/china"; queryFromServer(address,"province"); } } private void closeProgressDialog() { if (progressDialog!=null){ progressDialog.dismiss(); } } } 2.这是报错日志 ![图片说明](https://img-ask.csdn.net/upload/201905/10/1557481080_879893.png)
Android向PHP服务端上传文件报FileNotFoundException错误
服务端:(auth变量为用户登录状态验证,这部分确认没错。) ``` if( $auth==1){ $target_path = ROOT.basename($_FILES['uploadedfile']['name']); echo $target_path; if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['uploaded_file']['name']). " has been uploaded"; } else{ echo "There was an error uploading the file, please try again!" . $_FILES['uploadedfile']['error']; } }else{ echo 'error_login'; } ``` 客户端: ``` private String uploadFile = Environment.getExternalStorageDirectory()+ "/" + packageName + "/" + "images" + "/" + "image.jpg"; private String srcPath = Environment.getExternalStorageDirectory()+ "/" + packageName + "/" + "images" + "/" + "image.jpg"; private String actionUrl = getTargetUrl(); //PHP连接 private void uploadFile(final String uploadUrl) { Thread thread = new Thread() { @Override public void run() { //DEBUG File file = new File(uploadFile); if(file.exists()){ Log.i("DEBUG","要上传的文件存在"); } String end = "\r\n"; String twoHyphens = "--"; String boundary = "******"; try { URL url = new URL(uploadUrl); HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); // 设置每次传输的流大小,可以有效防止手机因为内存不足崩溃 // 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP 请求正文的流。 httpURLConnection.setChunkedStreamingMode(128 * 1024);// 128K // 允许输入输出流 httpURLConnection.setDoInput(true); httpURLConnection.setDoOutput(true); httpURLConnection.setUseCaches(false); // 使用POST方法 httpURLConnection.setRequestMethod("POST"); httpURLConnection.setRequestProperty("Connection", "Keep-Alive"); httpURLConnection.setRequestProperty("Charset", "UTF-8"); httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); DataOutputStream dos = new DataOutputStream(httpURLConnection.getOutputStream()); dos.writeBytes(twoHyphens + boundary + end); dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"" + srcPath.substring(srcPath.lastIndexOf("/") + 1) + "\"" + end); dos.writeBytes(end); FileInputStream fis = new FileInputStream(srcPath); byte[] buffer = new byte[8192]; // 8k int count = 0; // 读取文件 while ((count = fis.read(buffer)) != -1) { dos.write(buffer, 0, count); } fis.close(); dos.writeBytes(end); dos.writeBytes(twoHyphens + boundary + twoHyphens + end); dos.flush(); InputStream is = httpURLConnection.getInputStream(); InputStreamReader isr = new InputStreamReader(is, "utf-8"); BufferedReader br = new BufferedReader(isr); String result = br.readLine(); dos.close(); is.close(); } catch (Exception e) { e.printStackTrace(); setTitle(e.getMessage()); } } }; thread.start(); } ``` 运行后返回错误:(包含服务端接收页面的链接) 报错后运行也中止了,没有收到服务端打印的任何信息。 java.io.FileNotFoundException: http://.../upload.php at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:206) Studio指示错误的行是: InputStream is = httpURLConnection.getInputStream(); 起初以为是本地文件不存在,结果用文件管理器确认、包括代码中检查后也打出了“文件存在“,可以确定的是客户端文件路径没错。后来以为URL链接有问题,用电脑浏览器可以正常打开,可以打印内容,所以服务端链接也应没错。 百思不得其解,搜索很久也没找到解决方案,特来求助。求老司机带一带。
厉害的人看一下,我这个代码对不对
post请求,然后解析服务器返回的json请求 那里不对,大神指点一下。谢谢 ``` public void onClick(View view) { String username = usernameEdit.getText().toString(); String password = passwordEdit.getText().toString(); OkHttpClient client = new OkHttpClient(); RequestBody requestBody = new FormBody.Builder() .add("username", username) .add("password", password) .build(); Request request = new Request.Builder() .url("http://test.ourwechat.com/test/auth.php") .post(requestBody) .build(); JSONObject jsonObject = null; try { jsonObject = new JSONObject(); String code = jsonObject.getString("code"); } catch (JSONException e) { e.printStackTrace(); } if (code == -1){ Toast.makeText(Login.this,"登录失败",Toast.LENGTH_SHORT).show(); } ```
运行报FATAL EXCEPTION: main。
编写郭霖第一行代码和风天气 1.错误日志信息 ![图片说明](https://img-ask.csdn.net/upload/201905/11/1557552409_155464.png) 2.碎片布局后台代码 package com.example.coolweather; import android.app.Fragment; import android.app.ProgressDialog; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.example.coolweather.db.City; import com.example.coolweather.db.County; import com.example.coolweather.db.Province; import com.example.coolweather.util.HttpUtil; import com.example.coolweather.util.Utility; import org.litepal.crud.DataSupport; import java.io.IOException; import java.util.ArrayList; import java.util.List; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; /** * Created by Airth on 2019/5/10. */ public class ChooseAreaFragment extends Fragment { public static final int LEVEL_PROVINCE=0; public static final int LEVEL_CITY=1; public static final int LEVEL_COUNTY=2; private ProgressDialog progressDialog; private TextView titleText; private Button backButton; private ListView listView; private ArrayAdapter<String> adapter; private List<String> dataList = new ArrayList<>(); private int currentLevel; //当前被选中的级别 private Province selectedProvince;//被选中的省份 private City selectedCity;//被选中的城市 private List<Province> provinceList;//省列表 private List<City> cityList;//市列表 private List<County> countyList ;//县列表 /*获取控件实例id*/ @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { Log.d("ChooseAreaFragment","onCreateView"); View view = inflater.inflate(R.layout.choose_area,container,false); titleText = (TextView)view.findViewById(R.id.title_text); //获取标题栏文本id backButton = (Button) view.findViewById(R.id.back_button); //获取标题栏id listView = (ListView)view.findViewById(R.id.list_view); //获取Item列表id //获取ArrayAdapter对象 adapter =new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, dataList); listView.setAdapter(adapter);//设置并初始化适配器 return view;//将视图返回 } /*点击事件集合*/ @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { Log.d("ChooseAreaFragment","onActivityCreated"); super.onActivityCreated(savedInstanceState); //列表任意一栏被点击,则... listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.d("ChooseAreaFragment","列表被点了的..."); if (currentLevel == LEVEL_PROVINCE){ //当前选中的级别为省份时 selectedProvince = provinceList.get(position); //当前点击为选中状态 queryCities();//查询市的方法 } else if (currentLevel == LEVEL_CITY){ selectedCity = cityList.get(position); queryCounties(); } } }); backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (currentLevel == LEVEL_COUNTY){ queryCities(); } else if (currentLevel == LEVEL_CITY){ queryProvinces(); } } }); queryProvinces(); } private void queryCities() { titleText.setText(selectedProvince.getProvinceName()); //设置市的标题内容 backButton.setVisibility(View.VISIBLE); //设置返回按钮可见 //查询被选中的省份城市的市区 cityList = DataSupport.where("provinceid=?",String.valueOf(selectedProvince. getId())).find(City.class); Log.d("ChooseAreaFragment","市级"); if (cityList.size()>0){ //如果省列表不为空,则... dataList.clear(); for (City city:cityList){ //遍历每一份省的市级城市 dataList.add(city.getCityName()); //添加到数据列表中 } adapter.notifyDataSetChanged();//通知适配器数据更新了 listView.setSelection(0); currentLevel = LEVEL_CITY; } else{ int provinceCode = selectedProvince.getProvinceCode(); //获取被选取省级代码 String address = "http://guolin.tech/api/china/"+provinceCode;//获取被选取地区的网络地址 Log.d("ChooseAreaFragment","准备在网络中获取地址信息"); queryFromServer(address,"city"); // 在网络中查询 } } /*根据传入的地址和类型从服务器查询省市县数据*/ private void queryFromServer(String adress, final String type) { showProgressDialog(); // 发送一条网络请求 HttpUtil.sendOKHttpRequest(adress, new Callback() { //请求加载失败 @Override public void onFailure(Call call, IOException e) { //通过runOnUiThread方法回到主线程逻辑 getActivity().runOnUiThread(new Runnable() { @Override public void run() { closeProgressDialog(); Toast.makeText(getContext(),"加载失败",Toast.LENGTH_SHORT).show(); } }); } @Override public void onResponse(Call call, Response response) throws IOException { Log.d("ChooseAreaFragment","加载地区信息..."); String responseText = response.body().string(); boolean result = false; if ("province".equals(type)){ result = Utility.handleProvinceResponse(responseText); } else if ("city".equals(type)){ result = Utility.handleCityResponse(responseText,selectedProvince.getId()); } else if ("county".equals(type)){ result = Utility.handleCountyResponse(responseText, selectedCity.getId()); } if (result) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { Log.d("ChooseAreaFragment","开启线程更新UI"); closeProgressDialog(); if ("province".equals(type)){ queryProvinces(); } else if ("city".equals(type)){ queryCities(); } else if ("county".equals(type)){ queryCounties(); } } }); } if ("city".equals(type)){ result = Utility.handleProvinceResponse(responseText); } if ("county".equals(type)){ result = Utility.handleProvinceResponse(responseText); } } }); } /*显示进度对话框*/ private void showProgressDialog() { if (progressDialog==null){ progressDialog = new ProgressDialog(getActivity()); progressDialog.setMessage("正在加载..."); progressDialog.setCanceledOnTouchOutside(false); } progressDialog.show(); } private void queryCounties() { titleText.setText(selectedCity.getCityName()); backButton.setVisibility(View.VISIBLE); countyList = DataSupport.where("cityid = ?", String.valueOf(selectedCity.getId())).find(County.class); if (countyList.size()>0){ dataList.clear(); for (County county:countyList){ dataList.add(county.getCountyName()); } adapter.notifyDataSetChanged(); listView.setSelection(0); currentLevel=LEVEL_COUNTY; } else { int provinceCode = selectedProvince.getProvinceCode(); int cityCode = selectedCity.getCityCode(); String address = "http://guolin.tech/api/china/"+provinceCode+"/"+cityCode; queryFromServer(address,"county"); } } /*全国所有的省,优先查询数据库,如果没有再去服务器查询*/ private void queryProvinces() { titleText.setText("中国"); Log.d("ChooseAreaFragment","查询省中..."); backButton.setVisibility(View.GONE); provinceList = DataSupport.findAll(Province.class); if (provinceList.size()>0){ dataList.clear(); for (Province province:provinceList){ dataList.add(province.getProvinceName()); } adapter.notifyDataSetChanged(); listView.setSelection(0); currentLevel = LEVEL_PROVINCE; } else { Log.d("ChooseAreaFragment","服务器查询省中..."); String address = "http://guolin.tech/api/china"; queryFromServer(address,"province"); } } private void closeProgressDialog() { if (progressDialog!=null){ progressDialog.dismiss(); } } }
使用HttpUtil.sendOkHttpRequest后无法回调。。
在按着《第一行代码》这本书里面最后开发天气的那个app里面,在使用到用 HttpUtil.sendOkHttpRequest向服务器发送请求并将相应的数据回调到onResponse(), 但是我在调试之后发现每次都是在 HttpUtil.sendOkHttpRequest(address, new Callback(){ 之后就直接跳到最后了,跳过了 onRespons()和onFailure(),想请问一下有可能是什么情况导致的,谢谢了~~ private void queryFromServer(String address,final String type){ showProgressDialog(); HttpUtil.sendOkHttpRequest(address, new Callback() { @Override public void onResponse(Call call, Response response) throws IOException { String responseText = response.body().string(); boolean result =false; if("province".equals(type)){ result = Utility.handleProvinceResponse(responseText); }else if ("City".equals(type)){ result = Utility.handleCityResponse(responseText,selectedProvince.getId()); }else if ("county".equals(type)){ result = Utility.handleCountyResponse(responseText,selectedCity.getId()); } if(result){ getActivity().runOnUiThread(new Runnable() { @Override public void run() { closeProgressDialog(); if("province".equals(type)){ queryProvinces(); }else if ("city".equals(type)){ queryCities(); }else if ("County".equals(type)){ queryCounties(); } } }); } } public class HttpUtil { public static void sendOkHttpRequest(String address,okhttp3.Callback callback){ OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(address).build(); client.newCall(request).enqueue(callback); } } ``` ```
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
我在支付宝花了1分钟,查到了女朋友的开房记录!
在大数据时代下,不管你做什么都会留下蛛丝马迹,只要学会把各种软件运用到极致,捉奸简直轻而易举。今天就来给大家分享一下,什么叫大数据抓出轨。据史料证明,马爸爸年轻时曾被...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
使用 Python 和百度语音识别生成视频字幕
文章目录从视频中提取音频根据静音对音频分段使用百度语音识别获取 Access Token使用 Raw 数据进行合成生成字幕总结 从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFileClip(video_file) video.audio.write_...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
Python全栈 Linux基础之3.Linux常用命令
Linux对文件(包括目录)有很多常用命令,可以加快开发效率:ls是列出当前目录下的文件列表,选项有-a、-l、-h,还可以使用通配符;c功能是跳转目录,可以使用相对路径和绝对路径;mkdir命令创建一个新的目录,有-p选项,rm删除文件或目录,有-f、-r选项;cp用于复制文件,有-i、-r选项,tree命令可以将目录结构显示出来(树状显示),有-d选项,mv用来移动文件/目录,有-i选项;cat查看文件内容,more分屏显示文件内容,grep搜索内容;>、>>将执行结果重定向到一个文件;|用于管道输出。
​两年前不知如何编写代码的我,现在是一名人工智能工程师
全文共3526字,预计学习时长11分钟 图源:Unsplash 经常有小伙伴私信给小芯,我没有编程基础,不会写代码,如何进入AI行业呢?还能赶上AI浪潮吗? 任何时候努力都不算晚。 下面,小芯就给大家讲一个朋友的真实故事,希望能给那些处于迷茫与徘徊中的小伙伴们一丝启发。(下文以第一人称叙述) 图源:Unsplash 正如Elsa所说,职业转换是...
强烈推荐10本程序员必读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
非典逼出了淘宝和京东,新冠病毒能够逼出什么?
loonggg读完需要5分钟速读仅需 2 分钟大家好,我是你们的校长。我知道大家在家里都憋坏了,大家可能相对于封闭在家里“坐月子”,更希望能够早日上班。今天我带着大家换个思路来聊一个问题...
立即提问