Heim Backend-Entwicklung PHP-Tutorial PHP implementiert einfache GET-, POST-, Cookie-, Session- und andere Funktionen

PHP implementiert einfache GET-, POST-, Cookie-, Session- und andere Funktionen

Jun 09, 2018 pm 04:46 PM
php

Dieser Artikel stellt hauptsächlich PHP zur Implementierung einfacher GET-, POST-, Cookie-, Session- und anderer Funktionen vor. Ich hoffe, dass er für alle hilfreich ist.

Das Beispiel in diesem Artikel beschreibt die PHP-gekapselte HttpClient-Klasse. Die spezifische Analyse lautet wie folgt:

Dies ist eine PHP-gekapselte HttpClient-Klasse, die einfache Funktionen wie GET POST Cookie Session implementieren kann. Ich habe es ursprünglich gemacht, aber in den letzten zwei Tagen habe ich es noch einmal überarbeitet.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

<?php

/*

 * Filename: httpclient.php

 * Created on 2012-12-21

 * Created by RobinTang

 * To change the template for this generated file go to

 * Window - Preferences - PHPeclipse - PHP - Code Templates

 */

class SinCookie {

  public $name; // Cookie名称

  public $value; // Cookie值

  // 下面三个属性现在未实现

  public $expires; // 过期时间

  public $path; // 路径

  public $domain; // 域

  // 从Cookie字符串创建一个Cookie对象

  function __construct($s = false) {

    if ($s) {

      $i1 = strpos($s, &#39;=&#39;);

      $i2 = strpos($s, &#39;;&#39;);

      $this->name = trim(substr($s, 0, $i1));

      $this->value = trim(substr($s, $i1 +1, $i2 - $i1 -1));

    }

  }

  // 获取Cookie键值对

  function getKeyValue() {

    return "$this->name=$this->value";

  }

}

// 会话上下文

class SinHttpContext {

  public $cookies; // 会话Cookies

  public $referer; // 前一个页面地址

  function __construct() {

    $this->cookies = array ();

    $this->refrer = "";

  }

  // 设置Cookie

  function cookie($key, $val) {

    $ck = new SinCookie();

    $ck->name = $key;

    $ck->value = $val;

    $this->addCookie($ck);

  }

  // 添加Cookie

  function addCookie($ck) {

    $this->cookies[$ck->name] = $ck;

  }

  // 获取Cookies字串,请求时用到

  function cookiesString() {

    $res = &#39;&#39;;

    foreach ($this->cookies as $ck) {

      $res .= $ck->getKeyValue() . &#39;;&#39;;

    }

    return $res;

  }

}

// Http请求对象

class SinHttpRequest {

  public $url; // 请求地址

  public $method = &#39;GET&#39;; // 请求方法

  public $host; // 主机

  public $path; // 路径

  public $scheme; // 协议,http

  public $port; // 端口

  public $header; // 请求头

  public $body; // 请求正文

  // 设置头

  function setHeader($k, $v) {

    if (!isset ($this->header)) {

      $this->header = array ();

    }

    $this->header[$k] = $v;

  }

  // 获取请求字符串

  // 包含头和请求正文

  // 获取之后直接写socket就行

  function reqString() {

    $matches = parse_url($this->url);

    !isset ($matches[&#39;host&#39;]) && $matches[&#39;host&#39;] = &#39;&#39;;

    !isset ($matches[&#39;path&#39;]) && $matches[&#39;path&#39;] = &#39;&#39;;

    !isset ($matches[&#39;query&#39;]) && $matches[&#39;query&#39;] = &#39;&#39;;

    !isset ($matches[&#39;port&#39;]) && $matches[&#39;port&#39;] = &#39;&#39;;

    $host = $matches[&#39;host&#39;];

    $path = $matches[&#39;path&#39;] ? $matches[&#39;path&#39;] . ($matches[&#39;query&#39;] ? &#39;?&#39; . $matches[&#39;query&#39;] : &#39;&#39;) : &#39;/&#39;;

    $port = !empty ($matches[&#39;port&#39;]) ? $matches[&#39;port&#39;] : 80;

    $scheme = $matches[&#39;scheme&#39;] ? $matches[&#39;scheme&#39;] : &#39;http&#39;;

    $this->host = $host;

    $this->path = $path;

    $this->scheme = $scheme;

    $this->port = $port;

    $method = strtoupper($this->method);

    $res = "$method $path HTTP/1.1\r\n";

    $res .= "Host: $host\r\n";

    if ($this->header) {

      reset($this->header);

      while (list ($k, $v) = each($this->header)) {

        if (isset ($v) && strlen($v) > 0)

          $res .= "$k: $v\r\n";

      }

    }

    $res .= "\r\n";

    if ($this->body) {

      $res .= $this->body;

      $res .= "\r\n\r\n";

    }

    return $res;

  }

}

// Http响应

class SinHttpResponse {

  public $scheme; // 协议

  public $stasus; // 状态,成功的时候是ok

  public $code; // 状态码,成功的时候是200

  public $header; // 响应头

  public $body; // 响应正文

  function __construct() {

    $this->header = array ();

    $this->body = null;

  }

  function setHeader($key, $val) {

    $this->header[$key] = $val;

  }

}

// HttpClient

class SinHttpClient {

  public $keepcontext = true; // 是否维持会话

  public $context; // 上下文

  public $request; // 请求

  public $response; // 响应

  public $debug = false;

  // 是否在Debug模式,

  //为true的时候会打印出请求内容和相同的头部

  function __construct() {

    $this->request = new SinHttpRequest();

    $this->response = new SinHttpResponse();

    $this->context = new SinHttpContext();

    $this->timeout = 15; // 默认的超时为15s

  }

  // 清除上一次的请求内容

  function clearRequest() {

    $this->request->body = &#39;&#39;;

    $this->request->setHeader(&#39;Content-Length&#39;, false);

    $this->request->setHeader(&#39;Content-Type&#39;, false);

  }

  // post方法

  // data为请求的数据

  // 为键值对的时候模拟表单提交

  // 其他时候为数据提交,提交的形式为xml

  // 如有其他需求,请自行扩展

  function post($url, $data = false) {

    $this->clearRequest();

    if ($data) {

      if (is_array($data)) {

        $con = http_build_query($data);

        $this->request->setHeader(&#39;Content-Type&#39;, &#39;application/x-www-form-urlencoded&#39;);

      } else {

        $con = $data;

        $this->request->setHeader(&#39;Content-Type&#39;, &#39;text/xml; charset=utf-8&#39;);

      }

      $this->request->body = $con;

      $this->request->method = "POST";

      $this->request->setHeader(&#39;Content-Length&#39;, strlen($con));

    }

    $this->startRequest($url);

  }

  // get方法

  function get($url) {

    $this->clearRequest();

    $this->request->method = "GET";

    $this->startRequest($url);

  }

  // 该方法为内部调用方法,不用直接调用

  function startRequest($url) {

    $this->request->url = $url;

    if ($this->keepcontext) {

      // 如果保存上下文的话设置相关信息

      $this->request->setHeader(&#39;Referer&#39;, $this->context->refrer);

      $cks = $this->context->cookiesString();

      if (strlen($cks) > 0)

        $this->request->setHeader(&#39;Cookie&#39;, $cks);

    }

    // 获取请求内容

    $reqstring = $this->request->reqString();

    if ($this->debug)

      echo "Request:\n$reqstring\n";

    try {

      $fp = fsockopen($this->request->host, $this->request->port, $errno, $errstr, $this->timeout);

    } catch (Exception $ex) {

      echo $ex->getMessage();

      exit (0);

    }

    if ($fp) {

      stream_set_blocking($fp, true);

      stream_set_timeout($fp, $this->timeout);

      // 写数据

      fwrite($fp, $reqstring);

      $status = stream_get_meta_data($fp);

      if (!$status[&#39;timed_out&#39;]) { //未超时

        // 下面的循环用来读取响应头部

        while (!feof($fp)) {

          $h = fgets($fp);

          if ($this->debug)

            echo $h;

          if ($h && ($h == "\r\n" || $h == "\n"))

            break;

          $pos = strpos($h, &#39;:&#39;);

          if ($pos) {

            $k = strtolower(trim(substr($h, 0, $pos)));

            $v = trim(substr($h, $pos +1));

            if ($k == &#39;set-cookie&#39;) {

              // 更新Cookie

              if ($this->keepcontext) {

                $this->context->addCookie(new SinCookie($v));

              }

            } else {

              // 添加到头里面去

              $this->response->setHeader($k, $v);

            }

          } else {

            // 第一行数据

            // 解析响应状态

            $preg = &#39;/^(\S*) (\S*) (.*)$/&#39;;

            preg_match_all($preg, $h, $arr);

            isset ($arr[1][0]) & $this->response->scheme = trim($arr[1][0]);

            isset ($arr[2][0]) & $this->response->stasus = trim($arr[2][0]);

            isset ($arr[3][0]) & $this->response->code = trim($arr[3][0]);

          }

        }

        // 获取响应正文长度

        $len = (int) $this->response->header[&#39;content-length&#39;];

        $res = &#39;&#39;;

        // 下面的循环读取正文

        while (!feof($fp) && $len > 0) {

          $c = fread($fp, $len);

          $res .= $c;

          $len -= strlen($c);

        }

        $this->response->body = $res;

      }

      // 关闭Socket

      fclose($fp);

      // 把返回保存到上下文维持中

      $this->context->refrer = $url;

    }

  }

}

// demo

// now let begin test it

$client = new SinHttpClient(); // create a client

$client->get(&#39;http://www.baidu.com/&#39;);  // get

echo $client->response->body; // echo

?>

Nach dem Login kopieren

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

Definition und Nutzungsfähigkeiten von Smarty Custom Resources

PHP-Nutzungsverlauf Funktion

PHP-Prozesssteuerung und mathematische Operationsmethoden

Das obige ist der detaillierte Inhalt vonPHP implementiert einfache GET-, POST-, Cookie-, Session- und andere Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

See all articles