南寧seo網(wǎng)站排名優(yōu)化公司百度愛(ài)采購(gòu)官方網(wǎng)站
靜態(tài)博客框架jekyll、hexo和hugo三者之間的區(qū)別與差異
博客生成器?
- 全名為靜態(tài)網(wǎng)站生成器, 可在任意擁有主機(jī)功能的環(huán)境下寄存(托管)可直接配合域名進(jìn)行全球訪問(wèn)
劣勢(shì): 每次更新網(wǎng)頁(yè)必須重新生成整個(gè)網(wǎng)站 - 編譯速度(單位:秒)
- Jekyll: 15.90
- Hugo: 4.90
- Hexo的數(shù)據(jù)應(yīng)當(dāng)介于二者之間。
environment
- Jekyll 有g(shù)ithub支持,可以將markdown文件直接放到git倉(cāng)庫(kù),github會(huì)自動(dòng)生成網(wǎng)頁(yè)文件。(Github一直是一個(gè)親ruby的社區(qū))
- Hexo提供了方便的部署命令,可以做到一條命令部署到github上。
- Hugo的官方文檔寫的非常好,部署簡(jiǎn)潔。前兩者部署時(shí)需要安裝很多依賴,而hugo可以直接提供二進(jìn)制文件運(yùn)行,甚至不需要root權(quán)限。
To install Hugo on Kali Linux 2023.1, there are a few options available, depending on your preference. Here are two methods:
- Method 1: Install using the APT package manager. Open a terminal and run the following command:
- download hugo
# kali/debian
sudo apt install hugo
hugo version # 查看版本# yum
sudo yum install hugo -y# arch
sudo pacman -S hugo
# 選擇主題進(jìn)行下載 也可手動(dòng)下載
git submodule add https://github.com/CaiJimmy/hugo-theme-stack/ themes/hugo-theme-stack
- download git
# kali自帶 預(yù)裝
# yum/redhat系
sudo yum install git
# arch
sudo pacman -Syu git
# debian
sudo pacman -Syu git
- 安裝Hugo
https://gohugo.io/getting-started/installing/#less-technical-users
- 安裝Git
winget install Git.Git
安裝Hugo相關(guān)的VSCode插件:
- 你可以在VSCode的插件市場(chǎng)中搜索并安裝以下插件,這些插件會(huì)提供語(yǔ)法高亮,代碼片段,快速導(dǎo)航等功能,以提高你使用Hugo的效率:
- Front Matter: 這個(gè)插件可以幫助你管理文章的元數(shù)據(jù)例如創(chuàng)建日期,修改日期,標(biāo)題,SEO檢查等gohugo.io。
Hugo Language and Syntax Support: 這個(gè)插件提供Hugo語(yǔ)法的高亮和代碼片段功能gohugo.io。 - Hugo Helper: 這個(gè)插件包含一些有用的Hugo命令gohugo.io。
- Hugo Themer: 如果你在開(kāi)發(fā)主題,這個(gè)插件可以幫助你更方便地導(dǎo)航你的主題文件gohugo.io。
- Hugofy: 這個(gè)插件可以使得在使用Hugo時(shí)更加便捷gohugo.io。
- Syntax Highlighting for Hugo Shortcodes: 這個(gè)插件為Shortcodes添加了語(yǔ)法高亮,使得視覺(jué)識(shí)別各個(gè)部分更加容易gohugo.io。
- 設(shè)置VSCode任務(wù):
- Front Matter: 這個(gè)插件可以幫助你管理文章的元數(shù)據(jù)例如創(chuàng)建日期,修改日期,標(biāo)題,SEO檢查等gohugo.io。
//在VSCode中,你可以設(shè)置任務(wù)來(lái)運(yùn)行Hugo命令。首先,創(chuàng)建一個(gè).vscode/tasks.json文件,并添加如下內(nèi)容:{"version": "2.0.0","tasks": [{"label": "Start Dev","type": "shell","command": "hugo server -D","problemMatcher": []}]}
-
通過(guò)“運(yùn)行任務(wù)”或“命令面板”來(lái)運(yùn)行這個(gè)任務(wù),這將啟動(dòng)Hugo的開(kāi)發(fā)服務(wù)器laurentsenta.com。
使用VSCode的User Snippets:
VSCode的User Snippets功能可以幫助你快速插入常用的代碼片段。例如,你可以創(chuàng)建一個(gè)User Snippet來(lái)快速插入Hugo的YAML front matter,這可以大大提高你創(chuàng)建新文章的速度moonbooth.com。 -
配置Hugo:
在你的Hugo項(xiàng)目中,你可以在config.toml文件中設(shè)置你的首選編輯器為VSCode,如下所示:
# Set content editornewContentEditor = "code"
- 這樣,當(dāng)你從命令行創(chuàng)建新的內(nèi)容時(shí),VSCode將會(huì)自動(dòng)打開(kāi)新創(chuàng)建的文件vninja.net。
記住,不同的Hugo主題可能有不同的配置選項(xiàng),確保你查看了你所使用主題的文檔以了解詳細(xì)的配置指南gohugo.io。
hugo from github
- 1 log in or sign in
github - 2 在github賬戶中創(chuàng)建一個(gè)項(xiàng)目 名為 你的Github用戶名.github.io
- 這是存放生成出來(lái)的網(wǎng)站文件的地方
- 3在本地環(huán)境編寫網(wǎng)站(原因開(kāi)頭:每次更新發(fā)布都需要修改整個(gè)網(wǎng)站 延遲2min左右)
- 選擇hugo主題模板網(wǎng)站的地方
https://themes.gohugo.io/ - 打開(kāi)系統(tǒng)終端 (使用stack為例子)
stack
hugo new site test # 你的網(wǎng)站的根目錄名
cd test/theme
git clone # 你的主題的GitHub網(wǎng)址.git # wait a long time!
- 到了這一步 甚至可以直接依照官方文檔進(jìn)行配置[Stack的文檔](https://stack.jimmycai.com/) - 不建議本地+域名的方式進(jìn)行搭建網(wǎng)站 這將會(huì)帶來(lái)可怕的后果 逃( - 建議使用靜態(tài)網(wǎng)站托管 - 網(wǎng)站目錄結(jié)構(gòu)查看
├── archetypes
│ └── default.md
├── config.yaml # 網(wǎng)站配置文件
├── content # 站點(diǎn)內(nèi)的內(nèi)容都在這里
│ ├── categories # “分類”頁(yè)面的首頁(yè)
│ │ └── Test # “分類”頁(yè)面下的一個(gè)分類頁(yè)面
│ ├── page # 顯示在網(wǎng)站主頁(yè)左側(cè)邊欄菜單的選項(xiàng)
│ │ ├── about # 左側(cè)邊欄菜單中的“關(guān)于”頁(yè)面
│ │ ├── archives # 左側(cè)邊欄菜單中的“歸檔”頁(yè)面
│ │ ├── links # 左側(cè)邊欄菜單中的“鏈接”頁(yè)面
│ │ └── search # 左側(cè)邊欄菜單中的“搜索”頁(yè)面
│ └── post # 用戶寫的帖子都放在這里,每個(gè)子文件夾對(duì)應(yīng)一個(gè)帖子
│ ├── chinese-test
│ ├── emoji-support
│ ├── markdown-syntax
│ ├── math-typesetting
│ ├── placeholder-text
│ └── rich-content
├── data
├── layouts
├── LICENSE
├── README.md
├── resources
│ └── _gen
│ ├── assets
│ └── images
├── static # 放用戶自定義字體、用戶頭像、網(wǎng)站小圖標(biāo)等
└── themes # 放各種主題└── hugo-theme-stack # stack主題├── archetypes├── assets├── config.yaml├── data├── debug.sh├── exampleSite├── go.mod├── i18n├── images├── layouts├── LICENSE├── netlify.toml├── README.md└── theme.toml
- create(開(kāi)始基本用法介紹)
hugo new posts/隨便一個(gè)名字/index.md---
title: "文章標(biāo)題"
description: "簡(jiǎn)介"
date: 2022-01-29T02:02:45-05:00
image: "你同目錄下的封面圖片名字(帶后綴并且是相對(duì)路徑)"
categories:- 分類1- 分類2
tags:- 標(biāo)簽1- 標(biāo)簽2
---hugo new categories/分類名字/_index.md---
title: "分類名"
date: 2022-02-08T01:03:14-05:00
image: 你的圖片名(帶后綴)
style:background: "#2a9d8f"color: "#fff"
---
- 發(fā)布網(wǎng)站在網(wǎng)站根目錄
hugo --theme=主題文件夾名
#進(jìn)入public準(zhǔn)備發(fā)布
cd public
#發(fā)布上GitHub
git init
git add -A
git commit -m "對(duì)這次發(fā)布的說(shuō)明"
git remote add origin https://github.com/你的Github用戶名/你的Github用戶名.github.io.git
git push -u origin master
makdown語(yǔ)法快速入門
-
markdown語(yǔ)法
- Markdown 是一種輕量級(jí)標(biāo)記語(yǔ)言,創(chuàng)始人是約翰?格魯伯(John Gruber)。它允許人們 “使用易讀易寫的純文本格式編寫文檔,然后轉(zhuǎn)換成有效的 HTML 文檔”?!?維基百科。
- markdow 支持html css可以用來(lái)寫電子書 比如gitbook 如今被廣泛應(yīng)用到寫博客 ,比如 GitHub、簡(jiǎn)書、reddit、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge csdn
-
environment
- 系統(tǒng)默認(rèn)編輯器 markdown github 網(wǎng)頁(yè)版
- 1.眾所周知網(wǎng)頁(yè)開(kāi)發(fā)基本必備各種網(wǎng)頁(yè)版編譯環(huán)境
- 2.Typora
- 3.vscode
- Markdown 源文件只規(guī)定了顯示的內(nèi)容,并沒(méi)有定義顯示的樣式,所以在不同的預(yù)覽環(huán)境下會(huì)看到不同的效果。為了使其保持統(tǒng)一,需要將 Markdown 文件轉(zhuǎn)換成 HTML 文件;
- 常見(jiàn)的 Markdown 編輯器都帶有導(dǎo)出成 HTML 的功能,導(dǎo)出后通常含有編輯器自帶樣式;
- 利用 Pandoc,我們可以在命令行中直接將 Markdown 文件導(dǎo)出成 HTML 文件。
-
csdn導(dǎo)航欄自帶了很多功能(跳過(guò))下面 直接講markdown標(biāo)準(zhǔn)寫法
## 一 標(biāo)題
#### 1 下劃線標(biāo)題
# h1
## h2
### h3
#### h4
##### h5
###### h6
**加粗樣式**
*斜體樣式*
~~刪除線格式~~
> 這里是引用
- 三 段落
比如這樣
隨便換行
但是csdn這個(gè)吸金gouB特有的disbuff就是吞噬空格 和換行 下面會(huì)教你使用html代碼解決這個(gè)問(wèn)題
:一個(gè)字符的半角的不斷行的空格,如果需要在網(wǎng)頁(yè)中插入多個(gè)空格,可以將“ ”代碼寫多遍(常用方式);
  :一個(gè)字符的半角的空格,也可以將“?”寫多遍來(lái)插入多個(gè)空格;
  :兩個(gè)字符的全角的空格,也可以將“?”寫多遍來(lái)插入更多的空格;
 :小于一個(gè)字符的空格;說(shuō)明:單詞后面的分號(hào)記得帶上,是不能省略的,它也是html代碼中的一部分
> 這里是引用
<p>行內(nèi)的 html 代碼: <code><head><title>網(wǎng)頁(yè)標(biāo)題</title></head></code></p>
<p>行內(nèi)的 json 代碼:<code>var json = {key: value};</code></p>
- 高級(jí)語(yǔ)法
- 超鏈接
[Markdown語(yǔ)法](https://markdown.com.cn "最好的markdown教程")```
# 中括號(hào)為顯示部分
# 括號(hào)里面放鏈接
# 引號(hào)里面放渲染部分 當(dāng)年客戶端展示時(shí)鼠標(biāo)放到上面會(huì)顯示鏈接的懸停標(biāo)題
效果如下
Markdown語(yǔ)法
- 表格
| 項(xiàng)目 | Value |
| ---- | ----- |
| 電腦 | $1600 |
| 手機(jī) | $12 |
| 導(dǎo)管 | $1 || Column 1 | Column 2 |
| :---------------: | ---------------------: |
| centered 文本居中 | right-aligned 文本居右 |
- 列表
- 無(wú)序
- List item
- 有序
1. List item
- 代辦
- [ ] List item
- 隱藏玩法可使用的html標(biāo)簽
<span>、<cite>、<del><a> <img>
- 區(qū)域塊不受限
<div>、<table>、<pre>、<p>
# 為了避免bug 這里不需要遵守html規(guī)則可直接使用這些標(biāo)簽
如下
This is a regular paragraph.<table><tr><td>Foo</td></tr>
</table>This is another regular paragraph.
This is a regular paragraph.
Foo |
- 當(dāng)你使用markdown語(yǔ)法無(wú)法完成某一操作的時(shí)候 就需要去使用html/css
<p>html空格 空格 基礎(chǔ)教程(cainiaojc.com)</p>
<p>html空格   空格   基礎(chǔ)教程(cainiaojc.com)</p>
<p>html空格   空格   基礎(chǔ)教程(cainiaojc.com)</p>
<p>html空格   空格   基礎(chǔ)教程(cainiaojc.com)</p>
- 2 不常用的html字符
符號(hào) 表示  普通的英文半角空格
    普通的英文半角空格但不換行
  中文全角空格(一個(gè)中文寬度)
    半角(en)空格 (半個(gè)中文寬度,不受字體影響)
    全角(em)空格 (一個(gè)中文寬度,不受字體影響)
  四分之一全角(em)空格 (四分之一中文寬度)
  普通空格
相比普通空格,不間斷,按下space鍵產(chǎn)生的空格,不累加
在GitHub上搭建個(gè)人博客時(shí),你可以選擇購(gòu)買國(guó)內(nèi)或國(guó)外的域名。這兩種選擇各有其優(yōu)缺點(diǎn):
- 國(guó)內(nèi)域名:最大的差異在于,國(guó)內(nèi)域名需要備案才能使用,而且必須要有3個(gè)租期以上的服務(wù)器才能開(kāi)始備案,一臺(tái)服務(wù)器只能為一個(gè)域名備案zhuanlan.zhihu.com。另外,由于Github部署的是國(guó)外服務(wù)器,國(guó)內(nèi)的域名是不能用在國(guó)外服務(wù)器的,所以如果你打算在Github上部署博客,那么應(yīng)該考慮購(gòu)買國(guó)外域名zhuanlan.zhihu.com。
- 國(guó)外域名:國(guó)外域名買了就能用,不需要備案zhuanlan.zhihu.com。你可以在諸如Godaddy和NameSilo等國(guó)外知名的域名服務(wù)商上購(gòu)買zhuanlan.zhihu.com。另外,域名是可以隨時(shí)轉(zhuǎn)到不同服務(wù)商下的,比如將國(guó)外域名轉(zhuǎn)為國(guó)內(nèi),將騰訊云買的域名轉(zhuǎn)到阿里云等。但是,需要注意的是: 選好之后就盡量不要換了,在更換域名服務(wù)商之后,3個(gè)月內(nèi)域名是用不了的,類似被凍結(jié)的狀態(tài)zhuanlan.zhihu.com。
中國(guó)用戶在Github上搭建個(gè)人博客環(huán)境下,可以考慮購(gòu)買以下幾家公司的國(guó)外域名:
- GoDaddy:GoDaddy是全球最大的域名注冊(cè)商,提供多種頂級(jí)域名注冊(cè)服務(wù),比如.com、.net、.org等。它有中文界面,支持支付寶和銀聯(lián)支付,購(gòu)買流程簡(jiǎn)單易懂。GoDaddy還提供DNS管理服務(wù),方便你將域名解析到Github上zhuanlan.zhihu.com。
- Namecheap:Namecheap是另一個(gè)國(guó)外知名的域名注冊(cè)商,提供多種頂級(jí)域名注冊(cè)服務(wù)。Namecheap的價(jià)格相對(duì)較低,而且提供免費(fèi)的Whois隱私保護(hù)服務(wù),可以保護(hù)你的個(gè)人信息不被公開(kāi)。Namecheap也支持支付寶支付,但需要注意的是它的界面是英文的zhuanlan.zhihu.com。
- NameSilo:NameSilo是一家提供低廉價(jià)格的域名注冊(cè)服務(wù)的公司。它提供免費(fèi)的Whois隱私保護(hù)服務(wù),并且沒(méi)有任何隱藏費(fèi)用。NameSilo的界面是英文的,支持支付寶支付zhuanlan.zhihu.com。
選擇域名服務(wù)商時(shí), 考慮以下幾點(diǎn):
- 價(jià)格:不同的域名服務(wù)商價(jià)格可能會(huì)有所不同,比如初次購(gòu)買價(jià)格、續(xù)費(fèi)價(jià)格等。你需要根據(jù)自己的預(yù)算來(lái)選擇適合的服務(wù)商。
- 支付方式:不同的域名服務(wù)商可能支持不同的支付方式,如信用卡、Paypal、支付寶等。你需要選擇支持你方便的支付方式的服務(wù)商。
- 服務(wù):你需要考慮域名服務(wù)商的客戶服務(wù),比如是否有中文客戶服務(wù),解決問(wèn)題的速度如何等。
- 隱私保護(hù):如果你不希望你的個(gè)人信息被公開(kāi),你需要選擇提供Whois隱私保護(hù)服務(wù)的域名服務(wù)商。
以下是一些提供免費(fèi)域名的平臺(tái):
- Freenom:Freenom 提供免費(fèi)的頂級(jí)域名,包括 .tk、.ml、.ga、.cf 和 .gq 這些后綴。你可以免費(fèi)使用這些域名,但需要注意的是,Freenom 不會(huì)發(fā)送續(xù)期通知,所以你需要自己記得及時(shí)續(xù)期iyideng.vip。
- Dot.tk:Dot.tk 是一個(gè)屬于 Freenom 的網(wǎng)站,專門提供免費(fèi)的 .tk 域名。你可以在這個(gè)網(wǎng)站上免費(fèi)注冊(cè) .tk 域名,但同樣需要注意的是,你需要自行記得續(xù)期,否則域名會(huì)被回收iyideng.vip。
- InfinityFree:InfinityFree 是一家提供免費(fèi)虛擬主機(jī)的公司,同時(shí)也提供免費(fèi)的頂級(jí)域名 .ml、.ga、.cf、.gq 和 .tk。你需要注冊(cè)他們的免費(fèi)虛擬主機(jī)服務(wù),然后才能獲得免費(fèi)的頂級(jí)域名iyideng.vip。
- Hostinger:Hostinger 是一家提供虛擬主機(jī)服務(wù)的公司,如果你購(gòu)買他們的年度高級(jí)版或商業(yè)版共享虛擬主機(jī)套餐,可以在第一年免費(fèi)獲得高級(jí)頂級(jí)域名hostinger.com.hk。
- Bluehost:Bluehost 是一家提供虛擬主機(jī)服務(wù)的公司,如果你從他們那里購(gòu)買虛擬主機(jī),則可以在第一年免費(fèi)獲得域名zhuanlan.zhihu.com。
- DreamHost:DreamHost 是一家美國(guó)的主機(jī)商,如果你在它家購(gòu)買主機(jī)會(huì)免費(fèi)贈(zèng)送1個(gè)域名給你。當(dāng)然你也可以單獨(dú)在DreamHost官網(wǎng)上單獨(dú)注冊(cè)域名zhuanlan.zhihu.com。
(請(qǐng)注意,以上提供免費(fèi)域名的公司可能會(huì)有一些附加的條款和條件,例如必須購(gòu)買其他服務(wù),或者只提供一定期限的免費(fèi)域名。在注冊(cè)免費(fèi)域名之前,你應(yīng)該仔細(xì)閱讀這些條款和條件。)
域名&&CDN
- 網(wǎng)站雖然發(fā)布了, 但是資源還在 github.io 上,在國(guó)內(nèi)訪問(wèn)還是很慢, 需要 CDN 加速訪問(wèn)。
- 什么是二級(jí)域名
.com //頂級(jí)域名
baidu.com //一級(jí)域名
www.baidu.com //二級(jí)域名
bbs.baidu.com //二級(jí)域名
tieba.baidu.com //二級(jí)域名
#從 騰訊云 阿里云 等平臺(tái)購(gòu)買的域名如 .com .io .top 這些前面都有一段字符
比如 test.com 這些購(gòu)買的域名都是一級(jí)域名 而二級(jí)域名 常常被人們廣為使用 節(jié)約了成本 也方便管理
-
打開(kāi)騰訊云
-
github項(xiàng)目設(shè)置 完成之后就可以
 -
騰訊云CDN
- 2023年1月 開(kāi)始, https 請(qǐng)求按次數(shù)收費(fèi),300 萬(wàn)次/月 的免費(fèi)額度
- 緩存
- 源站 -> CDN節(jié)點(diǎn) -> 瀏覽器
- 分靜態(tài)資源, 可以把緩存時(shí)間配置長(zhǎng)一點(diǎn), 避免頻繁回源,圖片字體,css/js
- 全站, 緩存 30 天。
- 當(dāng)年的內(nèi)容, 使用默認(rèn)的緩存策略, Last-Modified 時(shí)間越長(zhǎng), 緩存越久 。
- 首頁(yè), 使用默認(rèn)緩存策略。 混存 10 分鐘甚至更短。
- 訪問(wèn)控制 防止被盜鏈。
- https 現(xiàn)在網(wǎng)站都要有。
- 時(shí)間太短, 用戶 頻繁 從 CDN 上獲取數(shù)據(jù), 浪費(fèi)流量。
- 時(shí)間太長(zhǎng), 用戶無(wú)法取得最新數(shù)據(jù)
-
CloudFlare免費(fèi)CDN配置進(jìn)入Cloudflare官網(wǎng)
- 注冊(cè)Cloudflare
- 選擇可靠的郵箱(排除qq郵箱)
- 密碼下面的選項(xiàng)是選擇是否接受Cloudflared的一些產(chǎn)品相關(guān)信息,自由選擇就好了。
- 進(jìn)入你的郵箱郵件里點(diǎn)擊url進(jìn)行二次驗(yàn)證,點(diǎn)擊鏈接后,你會(huì)看到提示,表示你的郵箱已經(jīng)完成驗(yàn)證。
- 進(jìn)入到賬號(hào)后臺(tái)界面,你點(diǎn)擊 add site即添加自己需要配置的域名,確認(rèn)方案后,Cloudflare會(huì)掃描該域名當(dāng)前的DNS記錄,你可以保留,也可以添加,也可以刪除.
- 直接輸入主域名(二級(jí)域名)就可以了->選擇套餐,三個(gè)付費(fèi)套餐之下,選擇免費(fèi)->點(diǎn)擊 continue 進(jìn)入下一步。
- Cloudflare會(huì)自動(dòng)掃描你域名的dns記錄
- 黃色圖標(biāo)亮起,則代表可以使用Cloudflared的cdn,灰色圖標(biāo),則不可以。
- 你選擇自己要加速的域名,不需要加速的也可以點(diǎn)擊proxy status選項(xiàng)欄的按鈕關(guān)閉。-> 選擇好域名,點(diǎn)擊 continue 進(jìn)入下一步,修改DNS服務(wù)器。 - 域名注冊(cè)商處修改NS記錄
- NS記錄是指處理域名解析的服務(wù)器,修改域名的NS記錄,讓它由不同的解析服務(wù)商來(lái)解析,例如可以指向Cloudflare。
- NS記錄修改生效。一般半個(gè)小時(shí)左右就可以修改成功。之后就可以用Cloudflare管理你的域名解析了。待NS記錄修改生效后,在Cloudflare的DNS下面,添加你的域名解析A記錄即可。
- 注冊(cè)Cloudflare
-
上述流程操作全部需要手動(dòng)操作web頁(yè)面選項(xiàng) ,故而可以寫py腳本
import requests
import jsondef get_record_id(dns_name, zone_id, token):resp = requests.get('https://api.cloudflare.com/client/v4/zones/{}/dns_records'.format(zone_id),headers={'Authorization': 'Bearer ' + token,'Content-Type': 'application/json'})if not json.loads(resp.text)['success']:return Nonedomains = json.loads(resp.text)['result']for domain in domains:if dns_name == domain['name']:return domain['id']return Nonedef update_dns_record(dns_name, zone_id, token, dns_id, ip, proxied=False):resp = requests.put('https://api.cloudflare.com/client/v4/zones/{}/dns_records/{}'.format(zone_id, dns_id),json={'type': 'A','name': dns_name,'content': ip,'proxied': proxied},headers={'Authorization': 'Bearer ' + token,'Content-Type': 'application/json'})if not json.loads(resp.text)['success']:return Falsereturn Truedns_id = get_record_id(dns_name, zone_id, token)
result = update_dns_record(dns_name, zone_id, token, dns_id, ip, proxied)
- py只實(shí)現(xiàn)了部分功能,但是我用更熟練的cpp可以更加完善 (需要按照庫(kù):sudo apt-get install libcurl4-openssl-dev)
#include <curl/curl.h>
#include <string>size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp)
{((std::string*)userp)->append((char*)contents, size * nmemb);return size * nmemb;
}std::string get(const std::string& url)
{CURL* curl;CURLcode res;std::string readBuffer;curl_global_init(CURL_GLOBAL_DEFAULT);curl = curl_easy_init();if(curl) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);res = curl_easy_perform(curl);if(res != CURLE_OK)fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));curl_easy_cleanup(curl);}curl_global_cleanup();return readBuffer;
}std::string put(const std::string& url, const std::string& data)
{CURL* curl;CURLcode res;std::string readBuffer;curl_global_init(CURL_GLOBAL_DEFAULT);curl = curl_easy_init();if(curl) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);res = curl_easy_perform(curl);if(res != CURLE_OK)fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));curl_easy_cleanup(curl);}curl_global_cleanup();return readBuffer;
}
- 添加錯(cuò)誤處理代碼,設(shè)置HTTP頭部,使用libcurl庫(kù)來(lái)發(fā)送HTTP請(qǐng)求,并添加錯(cuò)誤處理代碼和設(shè)置HTTP頭部,當(dāng)curl_easy_perform函數(shù)返回非零值時(shí),我們打印錯(cuò)誤信息并清理curl句柄。我們還添加了設(shè)置HTTP頭部的代碼,你可以使用curl_slist_append函數(shù)來(lái)添加HTTP頭部。
#include <curl/curl.h>
#include <string>
#include <iostream>size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp)
{((std::string*)userp)->append((char*)contents, size * nmemb);return size * nmemb;
}std::string get(const std::string& url)
{CURL* curl;CURLcode res;std::string readBuffer;curl_global_init(CURL_GLOBAL_DEFAULT);curl = curl_easy_init();if(curl) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);res = curl_easy_perform(curl);if(res != CURLE_OK){std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;curl_easy_cleanup(curl);return "";}curl_easy_cleanup(curl);}curl_global_cleanup();return readBuffer;
}std::string put(const std::string& url, const std::string& data)
{CURL* curl;CURLcode res;std::string readBuffer;curl_global_init(CURL_GLOBAL_DEFAULT);curl = curl_easy_init();if(curl) {curl_easy_setopt(curl, CURLOPT_URL, url.c_str());curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);res = curl_easy_perform(curl);if(res != CURLE_OK){std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;curl_easy_cleanup(curl);return "";}curl_easy_cleanup(curl);}curl_global_cleanup();return readBuffer;
}