1. 程式人生 > >通過抓包獲取內涵段子的介面

通過抓包獲取內涵段子的介面

http://is.snssdk.com/neihan/stream/mix/v1/?mpic=1&webp=1&essence=1&content_type=-101&message_cursor=-1&longitude=116.4121485&latitude=39.9365054&am_longitude=116.41828&am_latitude=39.937848&am_city=%E5%8C%97%E4%BA%AC%E5%B8%82&am_loc_time=1483686438786&count=30&min_time=1483929653
&screen_width=1080&iid=7164180604&device_id=34822199408&ac=wifi&channel=baidu&aid=7&app_name=joke_essay&version_code=590&version_name=5.9.0&device_platform=android&ssmix=a&device_type=Nexus%2B5&device_brand=google&os_api=25&os_version=7.1&uuid=359250050588035
&openudid=12645e537a2f0f25&manifest_version_code=590&resolution=1080*1776&dpi=480&update_version_code=5903

介面用的get,我沒有管header,但是請求成功了,說明沒有在header中新增驗證,只是上傳了一些裝置,地址資訊,這裡我自己看而已,然後就定死了,但是資料時隨機的,然後多抓了幾次,裡面有個時間的引數是當前的秒,long型別的,每次傳的時候獲取一下時間就可以了,再看一下資料結構:

{
            "group": {
                "user
": { "user_id": 6151682767, "name": "\u534e\u5357\u6c6a\u5bb6\u519b\u603b\u53f8\u4ee4", "followings": 0, "user_verified": false, "ugc_count": 1, "avatar_url": "http://p3.pstatp.com/thumb/ef40017ab932fec9852", "followers": 10, "is_following": false, "is_pro_user": false }, "text": "\u6211\u5973\u53cb\uff0c\u54c8\u54c8\uff0c\u5355\u8eab\u72d7\u4eec\uff0c\u5b64\u72ec\u7684\u6253\u98de\u673a\u53bb\u5427\u3002\u256d(\u256f\u03b5\u2570)\u256e", "neihan_hot_start_time": "00-00-00", "dislike_reason": [{ "type": 2, "id": 10, "title": "\u5427:\u7206\u7b11GIF" }, { "type": 4, "id": 0, "title": "\u5185\u5bb9\u91cd\u590d" }, { "type": 3, "id": 6151682767, "title": "\u4f5c\u8005:\u534e\u5357\u6c6a\u5bb6\u519b\u603b\u53f8\u4ee4" }], "create_time": 1483790338, "id": 53909265109, "favorite_count": 17, "go_detail_count": 4475, "user_favorite": 0, "share_type": 1, "max_screen_width_percent": 0.6, "is_can_share": 1, "comment_count": 259, "share_url": "http://m.neihanshequ.com/share/group/53909265109/?iid=7164180604&app=joke_essay", "label": 4, "content": "\u6211\u5973\u53cb\uff0c\u54c8\u54c8\uff0c\u5355\u8eab\u72d7\u4eec\uff0c\u5b64\u72ec\u7684\u6253\u98de\u673a\u53bb\u5427\u3002\u256d(\u256f\u03b5\u2570)\u256e", "category_type": 1, "id_str": "53909265109", "media_type": 2, "share_count": 318, "type": 3, "status": 102, "has_comments": 1, "large_image": { "width": 480, "r_height": 640, "r_width": 480, "url_list": [{ "url": "http://p3.pstatp.com/large/13b500030ca9e95eea99" }, { "url": "http://pb2.pstatp.com/large/13b500030ca9e95eea99" }, { "url": "http://pb3.pstatp.com/large/13b500030ca9e95eea99" }], "uri": "large/13b500030ca9e95eea99", "height": 640 }, "user_bury": 0, "activity": {}, "status_desc": "\u5df2\u53d1\u8868\uff0c\u7c89\u4e1d\u7b2c\u4e00\u65f6\u95f4\u53ef\u89c1", "quick_comment": false, "display_type": 0, "neihan_hot_end_time": "00-00-00", "is_gif": 1, "user_digg": 0, "online_time": 1483790338, "category_name": "\u7206\u7b11GIF", "category_visible": true, "bury_count": 131, "is_anonymous": false, "repin_count": 17, "min_screen_width_percent": 0.167, "is_neihan_hot": false, "digg_count": 542, "gifvideo": { "360p_video": { "width": 360, "url_list": [{ "url": "http://ic.snssdk.com/neihan/video/playback/?video_id=090d865fd9e04043b4de2e0550798e56&quality=360p&line=0&is_gif=1" }, { "url": "http://ic.snssdk.com/neihan/video/playback/?video_id=090d865fd9e04043b4de2e0550798e56&quality=360p&line=1&is_gif=1" }], "uri": "360p/090d865fd9e04043b4de2e0550798e56", "height": 480 }, "origin_video": { "width": 360, "url_list": [{ "url": "http://ic.snssdk.com/neihan/video/playback/?video_id=090d865fd9e04043b4de2e0550798e56&quality=origin&line=0&is_gif=1" }, { "url": "http://ic.snssdk.com/neihan/video/playback/?video_id=090d865fd9e04043b4de2e0550798e56&quality=origin&line=1&is_gif=1" }], "uri": "origin/090d865fd9e04043b4de2e0550798e56", "height": 480 }, "720p_video": { "width": 360, "url_list": [{ "url": "http://ic.snssdk.com/neihan/video/playback/?video_id=090d865fd9e04043b4de2e0550798e56&quality=720p&line=0&is_gif=1" }, { "url": "http://ic.snssdk.com/neihan/video/playback/?video_id=090d865fd9e04043b4de2e0550798e56&quality=720p&line=1&is_gif=1" }], "uri": "720p/090d865fd9e04043b4de2e0550798e56", "height": 480 }, "mp4_url": "http://ic.snssdk.com/neihan/video/playback/?video_id=090d865fd9e04043b4de2e0550798e56&quality=480p&line=0&is_gif=1.mp4", "video_height": 480, "480p_video": { "width": 360, "url_list": [{ "url": "http://ic.snssdk.com/neihan/video/playback/?video_id=090d865fd9e04043b4de2e0550798e56&quality=480p&line=0&is_gif=1" }, { "url": "http://ic.snssdk.com/neihan/video/playback/?video_id=090d865fd9e04043b4de2e0550798e56&quality=480p&line=1&is_gif=1" }], "uri": "480p/090d865fd9e04043b4de2e0550798e56", "height": 480 }, "cover_image_uri": "14d80007227542782f3c", "duration": 7.4, "video_width": 360 }, "has_hot_comments": 1, "allow_dislike": true, "image_status": 1, "user_repin": 0, "neihan_hot_link": {}, "group_id": 53909265109, "middle_image": { "width": 480, "r_height": 640, "r_width": 480, "url_list": [{ "url": "http://p3.pstatp.com/w480/13b500030ca9e95eea99.webp" }, { "url": "http://pb2.pstatp.com/w480/13b500030ca9e95eea99.webp" }, { "url": "http://pb3.pstatp.com/w480/13b500030ca9e95eea99.webp" }], "uri": "w480/13b500030ca9e95eea99", "height": 640 }, "category_id": 10 }
, "comments": [{ "text": "\u770b\u7740\u5979\uff0c\u6211\u89c9\u5f97\u6211\u7684\u53f3\u624b\u90fd\u7709\u6e05\u76ee\u79c0\u7684", "create_time": 1483921038, "user_verified": false, "user_bury": 0, "user_id": 6223077938, "bury_count": 0, "share_url": "http://m.neihanshequ.com/share/group/53909265109/?comment_id=53999432007", "id": 53999432007, "platform": "feifei", "is_digg": 0, "user_name": "\u767d\u9a6c\u975e\u9a6c\u5357\u67ef\u4e00\u68a6", "user_profile_image_url": "http://p1.pstatp.com/thumb/ef60017cce705ef7697", "status": 5, "description": "", "user_digg": 0, "user_profile_url": "", "share_type": 1, "digg_count": 1453, "is_pro_user": false, "platform_id": "feifei", "avatar_url": "http://p1.pstatp.com/thumb/ef60017cce705ef7697", "group_id": 53909265109 }], "type": 1, "display_time": 1483929654, "online_time": 1483929654 }

這裡只是列出了單個item,進行相應的處理就可以了,裡面有圖片,問題,還有視訊,我的裡面暫時沒有加視訊,以後會考慮的。
這裡寫圖片描述
然後看一下程式碼結構:
bean,程式碼中加了相應的註釋

package com.fanyafeng.recreation.bean;

import android.os.Parcel;
import android.os.Parcelable;

import com.fanyafeng.recreation.util.StringUtil;

import org.json.JSONObject;


public class MainItemBean implements Parcelable {

    private String title;   //title有可能為空
    private String image;   //http://p3.pstatp.com/需要加此字首
    private long id;        //id
    private String content; //text 有就顯示沒有就不顯示
    private String mp4Url;  //mp4_url

    public MainItemBean(JSONObject jsonObject) {
        JSONObject group = jsonObject.optJSONObject("group");
        setContent("此處為廣告,已為您過濾");
        if (group != null) {
            setTitle(group.optString("title"));
            setId(group.optLong("id"));
            setContent(group.optString("content"));

            if (!StringUtil.isNullOrEmpty(group.optString("mp4_url"))) {
                setMp4Url(group.optString("mp4_url"));
            }
            JSONObject gifvideo = group.optJSONObject("gifvideo");
            if (gifvideo != null) {
                setMp4Url(group.optString("mp4_url"));
            }

            JSONObject middle_image = group.optJSONObject("middle_image");
            if (middle_image != null) {
                setImage("http://p3.pstatp.com/" + middle_image.optString("uri"));
            }
            JSONObject large_image = group.optJSONObject("large_image");
            if (large_image != null) {
                setImage("http://p3.pstatp.com/" + large_image.optString("uri"));
            }
        }
    }


    protected MainItemBean(Parcel in) {
        title = in.readString();
        image = in.readString();
        id = in.readLong();
        content = in.readString();
        mp4Url = in.readString();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(title);
        dest.writeString(image);
        dest.writeLong(id);
        dest.writeString(content);
        dest.writeString(mp4Url);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<MainItemBean> CREATOR = new Creator<MainItemBean>() {
        @Override
        public MainItemBean createFromParcel(Parcel in) {
            return new MainItemBean(in);
        }

        @Override
        public MainItemBean[] newArray(int size) {
            return new MainItemBean[size];
        }
    };

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getMp4Url() {
        return mp4Url;
    }

    public void setMp4Url(String mp4Url) {
        this.mp4Url = mp4Url;
    }

    @Override
    public String toString() {
        return "MainItemBean{" +
                "title='" + title + '\'' +
                ", image='" + image + '\'' +
                ", id=" + id +
                ", content='" + content + '\'' +
                ", mp4Url='" + mp4Url + '\'' +
                '}';
    }
}

adapter:

package com.fanyafeng.recreation.adapter;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.facebook.drawee.view.SimpleDraweeView;
import com.fanyafeng.recreation.R;
import com.fanyafeng.recreation.activity.PreviewActivity;
import com.fanyafeng.recreation.bean.MainItemBean;
import com.fanyafeng.recreation.network.Urls;
import com.fanyafeng.recreation.refreshview.recyclerview.BaseRecyclerAdapter;
import com.fanyafeng.recreation.util.ControllerListenerUtil;
import com.fanyafeng.recreation.util.DpPxConvert;
import com.fanyafeng.recreation.util.MyUtils;
import com.fanyafeng.recreation.util.StringUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * Author: fanyafeng
 * Data: 16/11/9 14:52
 * Email: [email protected]
 */
public class MainAdapter extends BaseRecyclerAdapter<MainAdapter.MainViewHolder> {

    private Context context;
    private List<MainItemBean> mainItemBeanList;

    public MainAdapter(Context context, List<MainItemBean> mainItemBeanList) {
        this.context = context;
        this.mainItemBeanList = mainItemBeanList;
    }

    @Override
    public MainViewHolder getViewHolder(View view) {
        return new MainViewHolder(view);
    }

    @Override
    public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType, boolean isItem) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_main_layout, parent, false);
        return new MainViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MainViewHolder holder, int position, boolean isItem) {
        MainViewHolder mainViewHolder = holder;
        final MainItemBean mainItemBean = mainItemBeanList.get(position);
        mainViewHolder.tvMainItem.setText(mainItemBean.getContent());
        mainViewHolder.sdvMainItem.setVisibility(View.GONE);
        if (!StringUtil.isNullOrEmpty(mainItemBean.getImage())) {
            mainViewHolder.sdvMainItem.setVisibility(View.VISIBLE);
            final String img = mainItemBean.getImage();
            ControllerListenerUtil.setControllerListener(mainViewHolder.sdvMainItem, img,
                    (int) (MyUtils.getScreenWidth(context) - DpPxConvert.dip2px(context, 60)));
            mainViewHolder.sdvMainItem.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ArrayList<String> list = new ArrayList<String>();
                    list.add(img + mainItemBean.getImage());
                    Intent intent = new Intent(context, PreviewActivity.class);
                    intent.putStringArrayListExtra("list", list);
                    context.startActivity(intent);
                }
            });
        } else {
            mainViewHolder.sdvMainItem.setVisibility(View.GONE);
        }
    }

    @Override
    public int getAdapterItemCount() {
        return mainItemBeanList.size();
    }

    class MainViewHolder extends RecyclerView.ViewHolder {

        TextView tvMainItem;
        SimpleDraweeView sdvMainItem;

        public MainViewHolder(View itemView) {
            super(itemView);
            tvMainItem = (TextView) itemView.findViewById(R.id.tvMainItem);
            sdvMainItem = (SimpleDraweeView) itemView.findViewById(R.id.sdvMainItem);
        }
    }
}

fragment:

package com.fanyafeng.recreation.fragment;

import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.fanyafeng.recreation.R;
import com.fanyafeng.recreation.adapter.MainAdapter;
import com.fanyafeng.recreation.bean.MainItemBean;
import com.fanyafeng.recreation.network.NetUtil;
import com.fanyafeng.recreation.network.Urls;
import com.fanyafeng.recreation.refreshview.XRefreshView;
import com.fanyafeng.recreation.refreshview.XRefreshViewFooter;
import com.fanyafeng.recreation.util.StringUtil;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class OneFragment extends BaseFragment {
    private Toolbar toolbar_one;

    private RecyclerView rvMain;
    private XRefreshView refreshMain;
    private List<MainItemBean> mainItemBeanList = new ArrayList<>();
    private MainAdapter mainAdapter;

    private FloatingActionButton fabMainToTop;

    private FragmentDialogInterface fragmentDialogInterface;

    public OneFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_one, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        initView();
        initData();
    }

    private void initView() {
        toolbar_one = (Toolbar) getActivity().findViewById(R.id.toolbar_one);
        toolbar_one.setTitle(getString(R.string.app_name));
        toolbar_one.setLogo(R.drawable.simle_logo_01);

        rvMain = (RecyclerView) getActivity().findViewById(R.id.rvMain);
        rvMain.setLayoutManager(new GridLayoutManager(getActivity(), GridLayoutManager.VERTICAL, 1, false));

        refreshMain = (XRefreshView) getActivity().findViewById(R.id.refreshMain);
        refreshMain.setPullLoadEnable(true);
        refreshMain.setAutoLoadMore(true);

        fabMainToTop = (FloatingActionButton) getActivity().findViewById(R.id.fabMainToTop);

        Log.d("time", "當前時間戳" + Integer.parseInt(getVersion(getActivity()).replace(".", "")));
        getVersion(getActivity()).replace(".", "");


    }

    public static String getVersion(Context context)//獲取版本號
    {
        try {
            PackageInfo pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
            return pi.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return context.getString(R.string.version_unknown);
        }
    }

    private void initData() {
        loadData();

        mainAdapter = new MainAdapter(getActivity(), mainItemBeanList);
        mainAdapter.setCustomLoadMoreView(new XRefreshViewFooter(getActivity()));
        rvMain.setAdapter(mainAdapter);

        refreshMain.setXRefreshViewListener(new XRefreshView.SimpleXRefreshListener() {
            @Override
            public void onRefresh() {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        refreshData();
                    }
                }, 1000);
            }

            @Override
            public void onLoadMore(boolean isSilence) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        loadMoreData();
                    }
                }, 1000);
            }
        });

        fabMainToTop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if (mainItemBeanList.size() > 0)
                            rvMain.smoothScrollToPosition(0);
                    }
                }, 200);

            }
        });
    }

    private void refreshData() {
        new AsyncTask<String, String, String>() {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                mainItemBeanList.clear();
                refreshMain.stopRefresh();
                try {
                    if (!StringUtil.isNullOrEmpty(s)) {
                        JSONObject jsonObject = new JSONObject(s);
                        if (jsonObject != null) {
                            String message = jsonObject.optString("message");//判斷請求狀態
                            if (message.equals("success")) {
                                JSONObject data = jsonObject.optJSONObject("data");
                                if (data != null) {
                                    JSONArray dataArray = data.optJSONArray("data");
                                    int dataLength = dataArray.length();
                                    for (int i = 0; i < dataLength; i++) {
                                        MainItemBean mainItemBean = new MainItemBean(dataArray.optJSONObject(i));
                                        mainItemBeanList.add(mainItemBean);
                                    }
                                    mainAdapter.notifyDataSetChanged();
                                    return;
                                }
                            }
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                Toast.makeText(getActivity(), "資料載入失敗", Toast.LENGTH_SHORT).show();

            }

            @Override
            protected String doInBackground(String... params) {
                return NetUtil.httpGetUtil(getActivity(), Urls.GET_ARTICLE_LIST + System.currentTimeMillis() / 1000 + Urls.GET_ARTICLE_LIST_END);
            }
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }

    private void loadMoreData() {
        new AsyncTask<String, String, String>() {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                try {
                    if (!StringUtil.isNullOrEmpty(s)) {
                        JSONObject jsonObject = new JSONObject(s);
                        if (jsonObject != null) {
                            String message = jsonObject.optString("message");//判斷請求狀態
                            if (message.equals("success")) {
                                JSONObject data = jsonObject.optJSONObject("data");
                                if (data != null) {
                                    JSONArray dataArray = data.optJSONArray("data");
                                    int dataLength = dataArray.length();
                                    for (int i = 0; i < dataLength; i++) {
                                        MainItemBean mainItemBean = new MainItemBean(dataArray.optJSONObject(i));
                                        mainItemBeanList.add(mainItemBean);
                                    }
                                    mainAdapter.notifyDataSetChanged();
                                    refreshMain.stopLoadMore();
                                    return;
                                }
                            }
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                Toast.makeText(getActivity(), "資料載入失敗", Toast.LENGTH_SHORT).show();
            }

            @Override
            protected String doInBackground(String... params) {
                return NetUtil.httpGetUtil(getActivity(), Urls.GET_ARTICLE_LIST + System.currentTimeMillis() / 1000 + Urls.GET_ARTICLE_LIST_END);
            }
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }


    private void loadData() {
        new AsyncTask<String, String, String>() {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                try {
                    if (!StringUtil.isNullOrEmpty(s)) {
                        JSONObject jsonObject = new JSONObject(s);
                        if (jsonObject != null) {
                            String message = jsonObject.optString("message");//判斷請求狀態
                            if (message.equals("success")) {
                                JSONObject data = jsonObject.optJSONObject("data");
                                if (data != null) {
                                    JSONArray dataArray = data.optJSONArray("data");
                                    int dataLength = dataArray.length();
                                    for (int i = 0; i < dataLength; i++) {
                                        MainItemBean mainItemBean = new MainItemBean(dataArray.optJSONObject(i));
                                        mainItemBeanList.add(mainItemBean);
                                    }
                                    mainAdapter.notifyDataSetChanged();
                                    return;
                                }
                            }
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                Toast.makeText(getActivity(), "資料載入失敗", Toast.LENGTH_SHORT).show();
            }

            @Override
            protected String doInBackground(String... params) {
                return NetUtil.httpGetUtil(getActivity(), Urls.GET_ARTICLE_LIST + System.currentTimeMillis() / 1000 + Urls.GET_ARTICLE_LIST_END);
            }
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            fragmentDialogInterface = (FragmentDialogInterface) context;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

相關推薦

通過獲取內涵段子介面

http://is.snssdk.com/neihan/stream/mix/v1/?mpic=1&webp=1&essence=1&content_type=-101&message_cursor=-1&longit

通過工具Fiddle找api介面

有時我們為了找到一些隱藏的介面,我們可以通過執行手機客戶端app找出該應用中的api,通過抓包工具Fiddler可以輕鬆簡單的找出你需要的介面. 首先下載安裝Fiddler,安裝完成後開啟: 然後點選選單欄的Tools,選擇第一項Fiddler Options...:

通過,實現Python模擬登陸各網站,原理分析!

瀏覽器中 cda class 登陸 驗證 查詢 圖片 自動化 cap 一、教程簡介 1.1 基本介紹 通過分析登陸流程並使用 Python 實現模擬登陸到一個實驗提供的網站,在實驗過程中將學習並實踐 Python 的網絡編程,Python 實現模擬登陸的方法,使

python爬蟲如何獲取網頁資訊時,發現所需要的資訊是動態生成的,然後獲取到資訊來源的URL?

如果在利用爬蟲爬取網頁資料的時候,發現是動態生成的時候,目前來看主要表現在以下幾種: 以介面的形式生成資料,這種形式其實挺好處理的,比較典型的是知乎的使用者資訊,我們只要知道介面的URL,就可以不用再考慮頁面本身的內容 以知乎為例,我們在爬取使用者資訊的時候,可能

Charlse獲取Android應用的https請求資料

1、選單欄依次選擇help->SSL Proxying -> install charlse root certification開啟電腦安裝證書介面(此處以windows為例) 依次點選安裝證書 跳轉到證書匯入嚮導,儲存位置選擇當前使用者和本地電腦都可以,

UDPchecksum值不對導致可以獲取到但是應用層recvfrom無法接收到資料

UDP checksum 今天在驅動裡面改了UDP packet的payload,發出這個UDP包之後,對方在驅動裡面能收到這個包。 但是indicate給OS之後,APP卻收不到這個包。Debug了一段時間之後,我懷疑應該是checksum之類的問題,果然…

如何通過出rtmp的完整留地址

http://blog.csdn.net/ddr77/article/details/53115904 1)首先t通過connect命令,抓到流id前面的部分。如圖 在connet命令裡,tcurl就是前面的一部分。 2)通過Play命令獲取流id 

wireshark獲取網站登入資訊

最近有個需求,用python實現自動回覆某個帖子,達到人工置頂的目的。要自動回覆,自然要先登入,所以需要獲取到登入時http post提交的使用者資訊,抓包工具使用wireshark。預設已經配置好wireshark,並且具備計算機網路的基礎知識,如果不具備請自行百度。用來登

利用Charles+Python獲取App資料

之前因為工作需要,所以偶爾瞭解其他App的一些資訊. 雖然有些資訊,肉眼也看得到,但是自己照著打,實在有點累... 所以同事讓我幫忙嘗試抓包. 利用Charles開啟以後. 發現有些json的URL是可以直接開啟. 這種是最舒服的. 並且,手動調整offlet和limi

關於wireshark獲取的Frame:物理層的資料幀概況筆記

  Frame:物理層的資料幀概況。  Ethernet II:資料鏈路層乙太網幀頭部資訊。  Internet Protocol Version 4:網際網路層IP包頭部資訊。  Transmission Control Protocol:傳輸層的資料段頭部資訊,此處是TC

WireShark獲取簡書的登入密碼

現在某些網站在使用者登入的過程中都是使用明文來傳輸使用者密碼的,這就使得使用者密碼完全暴露在網路中。通過抓包工具就很容易抓取密碼。這裡就以抓取簡書的登入密碼為例來介紹下抓包的過程。1. 下載工具抓包工具有很多種,我們這裡使用的是 Wireshark,下載並安裝 Wiresha

網路應用(1):獲取APP的重要資訊 | charles

小白:何為抓包? 小程:就是截獲網路上收發的資料包。 小白:網路上那麼多資料包,怎麼知道哪些是有用的? 小程:只截獲目標app的資料包就縮小了範圍,但即便是縮小了範圍,也需要進一步分析與排查。 小白:在垃圾堆裡找壞人的行動時間與地點嗎?這是使徒行者2的橋段啊,你有沒有看過? "抓

java解析xml文件練習——通過應用獲取應用圖標即其他信息(基於魅族應用商店)

fin vma tdm row con smartd enter music close 1、解析包名數據文件(txt文件),並生成包名數組: package jsouphtml; import java.io.BufferedReader; import j

python 內涵段子

爬蟲#!/usr/bin/env python #coding:utf-8 import requests,io,time from bs4 import BeautifulSoup def neihanjoke(): headers = { 'Accept':

通過wireshark來講解HTTP中Connection: keep-alive頭部的作用

tcp 沒有 資源 ack shark 主動 斷開連接 工作 msl 今天周末時間,有空給大家講解一個小知識點,即HTTP的keep-alive頭部。我使用wireshark來抓取網絡包來在實戰中講解。希望能讓大家更容易、更直觀的理解! HTTP中keep-alive頭部的

詳解Android/IOS平臺下工具使用以及取API介面

抓包工具 Charles 主機允許代理模式 客戶端設定代理 截獲資料包 HTTPS 模仿一個app

libcurl 設定代理,通過Fiddler可以進行

轉載:https://blog.csdn.net/jaryguo/article/details/53021923 用libcurl在專案開發過程中,除錯階段需要進行抓包測試,但Fiddler不能收到應用的Http連線。 Google了一下,因為應用用了libcurl的介面來建立HTTP連線,如果要使用F

用Python實現手機獲取噹噹圖書差評資料!

在這個萬物互聯的時代,手機端(App)、電腦端(Web),連線著你我他。 本次學習了手機抓包的相關知識,瞭解了Charles-mitmproxy-Appium的基本使用,通過對當當圖書評論的爬取,得以實踐。 那麼就讓我們來看看噹噹圖書「活著」的差評吧! / 01 / Charles

計算機網路實驗(二)之Wireshark分析獲取URL列表(去重、排序、統計)

實驗要求 本試驗要求基於第一次實驗中訪問某官網主頁時所抓取到的資料包,用Python 3語言、Jupyter Notebook和Pyshark編寫程式碼進行協議分析所需的開發環境,編寫程式碼,以輸出的方式列出首頁以及其所包含的所有資源(至少包含如下型別

vue如何通過NodeJs本地獲取微信access_token及簽名,並呼叫微信介面

一直都想搞一下微信公眾號網頁開發,公司忙沒有時間自己也沒開發過所以也沒有頭緒,前兩天通過自己的摸索以及自行查詢的資料,終於通過nodejs在本地成功的獲取到了微信的access_token及簽名,以及呼叫微信的介面.因為筆者自己在做的時候費了挺長時間,沒有找到一個相