2012-02-16 29 views
1

我與重新實施一個REST API爲其客戶沒有源代碼,並失去訪問服務器...

我發現工作來電者正在發送帖子,但沒有發佈數據。所有參數都在URL中指定,或者如果是張貼表單,則會採取什麼操作。

像這樣:

"POST http://foo.com/api/rest/?method=users.add_user&token=foo&section=bar&group=baz HTTP/1.1" 200 605 "-" "-" 

令我驚訝的那些參數既不在$ _GET也不$ _ POST,但只有在$ _REQUEST可用。

我在這裏錯過了什麼嗎?爲什麼他們不在$ _GET中作爲訪問URL的一部分?顯而易見的答案是「因爲這是一個POST,所以GET未定義」?

有人可以教我關於我對這些超級全局的誤解嗎?

+1

這是一個遠射,但$ _REQUEST通常還包含$ _COOKIE。這些密鑰是否有可能在客戶端Cookie中設置? – 2012-02-16 17:35:21

+1

你知道指定url中的參數是表單的「GET方式」,「POST方式」會將它們發送到http正文中?我想這可能與此相關(儘管我不太瞭解PHP)。如果您使用GET作爲方法會發生什麼? – ZPiDER 2012-02-16 17:37:01

+0

@ZPiDER - 該帖子來自不在我控制範圍內的遠程腳本,但我的問題不在於調試該過程。 – jerrygarciuh 2012-02-16 17:47:45

回答

2

$ _GET和$ _POST是空的,因爲您使用POST協議,但通過GET方法發送變量(在U​​RL中對它們進行編碼)。

PHP正在查找使用的POST方法,因此它將$ _GET變量中的信息設置爲空,然後將表單的POST數據中發送的變量解析爲$ _POST變量,即:無。

另一方面,$ _REQUEST變量在不同的機制上運行,它將解析來自請求的所有變量,無論它們來自cookie,多部分數據,帖子,獲取等等。這就是爲什麼你在那裏看到它們的原因。

通常,腳本和應用程序無論如何都會處理$ _REQUEST數據,因爲它是所有數據的更加簡潔的集合,並且由於您在技術上無法在同一請求中獲得GET和POST數據,所以您不必擔心數據集之間的衝突。

+0

非常感謝。這正是我直到今天都沒有學到的東西。多謝! – jerrygarciuh 2012-02-16 17:59:48

+0

那麼,如果我提交一個表單到'somepage.php?key = blah',即使沒有POST數據,'$ _GET ['key']'在那裏怎麼辦? – 2012-02-16 18:01:02

+0

有一個警告。有時你明確只想要一個變量,如果它正確發佈。在這種情況下,檢查$ _POST並忽略$ _REQUEST是首選機制。這通常是在您採取「破壞性」行動時(以某種方式更改數據的行爲),並且您確實不希望谷歌干擾。 – NotMe 2012-02-16 18:02:01